Obter texto de DataGridView selecionado células
-
05-09-2019 - |
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.
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;
}
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:
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())