Pergunta

Eu tenho um DataGridView com células de um arquivo de banco de dados que contém dados. Basicamente, eu quero começar o texto dos selecionados células do DataGridView e exibi-lo em uma caixa de texto no clique do botão. O código para o evento clique de botão é:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim SelectedThings As String = DataGridView1.SelectedCells.ToString
    TextBox1.Text = SelectedThings
End Sub

No entanto, em TextBox1 eu recebo:

System.Windows.Forms.DataGridViewSelectedCellCollection

Eu estou pensando que não é tão simples como parece. Eu sou um desenvolvedor C apenas aprender VB.NET.

Foi útil?

Solução

DataGridView.SelectedCells é uma coleção de células, por isso não é tão simples como chamar ToString() nele. Você tem que percorrer cada célula na coleção e obter o valor de cada célula em vez.

A seguir irá criar uma lista delimitada por vírgulas de valores de todos os células selecionadas.

C #

TextBox1.Text = "";
bool FirstValue = true;
foreach(DataGridViewCell cell in DataGridView1.SelectedCells)
{
    if(!FirstValue)
    {
        TextBox1.Text += ", ";
    }
    TextBox1.Text += cell.Value.ToString();
    FirstValue = false;
}

VB.NET ( Traduzido do código acima)

TextBox1.Text = ""
Dim FirstValue As Boolean =  True 
Dim cell As DataGridViewCell
For Each cell In DataGridView1.SelectedCells
    If Not FirstValue Then
        TextBox1.Text += ", "
    End If
    TextBox1.Text += cell.Value.ToString()
    FirstValue = False
Next

Outras dicas

Tente isto:

Dim i = Datagridview1.currentrow.index
textbox1.text = datagridview1.item(columnindex, i).value

Ele deve funcionar:)

Simplesmente

MsgBox(GridView1.CurrentCell.Value.ToString)
Private Sub DataGridView1_CellClick(ByVal sender As System.Object, _
                                    ByVal e As DataGridViewCellEventArgs) _
                                    Handles DataGridView1.CellClick
    MsgBox(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value)
End Sub

Muitas das respostas nesta página aplicam-se apenas a uma única célula, e OP pediu todas as células selecionadas.

Se tudo que você quer é o conteúdo da célula, e você não se preocupam com referências às células reais que são selecionados, você pode simplesmente fazer isso:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim SelectedThings As String = DataGridView1.GetClipboardContent().GetText().Replace(ChrW(9), ",")
    TextBox1.Text = SelectedThings
End Sub

Quando Button1 é clicado, este irá preencher TextBox1 com os valores separados por vírgulas das células seleccionadas.

Neste caso específico, o ToString () irá retornar o nome do objeto retruned pela propriedade SelectedCell. (A recolha das células selecionadas atualmente).

Este comportamento ocorre quando um objecto não tem implenetation específico para o ToString () métodos.

no nosso caso, tudo que você tem a fazer é iterar a coleção das células e para acumular seus valores para uma cadeia. em seguida, empurre esta corda à caixa de texto.

dê uma olhada aqui como implementar a iteração:

MSDN

Ou no caso de você só precisa do valor da venda primeira seleted (ou apenas uma célula selecionada se um é selecionado)

TextBox1.Text = SelectedCells[0].Value.ToString();

O melhor de dois mundos .....

Private Sub tsbSendNewsLetter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbSendNewsLetter.Click
        Dim tmpstr As String = ""
        Dim cnt As Integer = 0
        Dim virgin As Boolean = True
        For cnt = 0 To (dgvDetails.Rows.Count - 1)
            If Not dgvContacts.Rows(cnt).Cells(9).Value.ToString() Is Nothing Then
                If Not dgvContacts.Rows(cnt).Cells(9).Value.ToString().Length = 0 Then
                    If Not virgin Then
                        tmpstr += ", "
                    End If
                    tmpstr += dgvContacts.Rows(cnt).Cells(9).Value.ToString()
                    virgin = False
                    'MsgBox(tmpstr)
                End If
            End If
        Next
        Dim email As New qkuantusMailer()
        email.txtMailTo.Text = tmpstr
        email.Show()
    End Sub

ou, podemos usar algo como isto

dim i = dgv1.CurrentCellAddress.X
dim j = dgv1.CurrentCellAddress.Y
MsgBox(dgv1.Item(i,j).Value.ToString())
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top