Obtener texto de las celdas seleccionadas DataGridView
-
05-09-2019 - |
Pregunta
Tengo un DataGridView con células procedentes de un archivo de base de datos que contiene los datos. Básicamente, quiero obtener el texto de los seleccionados las células en el DataGridView y mostrarlo en un cuadro de texto con el clic del botón. El código para el evento de clic de botón es:
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
Sin embargo, en TextBox1 me sale:
System.Windows.Forms.DataGridViewSelectedCellCollection
Estoy pensando que no es tan simple como parece. Soy un desarrollador de C aprendiendo VB.NET.
Solución
DataGridView.SelectedCells
es una colección de las células, así que no es tan simple como llamar ToString()
en él. Usted tiene que recorrer cada célula en la colección y obtener el valor de cada celda en lugar.
La siguiente creará una lista separada por comas de valores de todas las celdas seleccionadas.
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 ( Traducido del código anterior)
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
Otros consejos
Prueba esto:
Dim i = Datagridview1.currentrow.index
textbox1.text = datagridview1.item(columnindex, i).value
Se debe trabajar:)
Simplemente
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
Muchas de las respuestas en esta página sólo se aplican a una sola celda, y OP pidió todos las celdas seleccionadas.
Si lo que quieres es el contenido de la celda, y que no se preocupan por las referencias a las celdas reales que son seleccionados, sólo puede hacer esto:
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
Cuando se hace clic Button1
, este llenará TextBox1
con los valores separados por comas de las celdas seleccionadas.
En este caso específico, el ToString () devolverá el nombre del objeto retruned por la Propiedad SelectedCell. (Una colección de las celdas seleccionadas actualmente).
Este comportamiento se produce cuando un objeto no tiene implenetation específico para el ToString () métodos.
En nuestro caso, todo lo que tiene que hacer es iterar la colección de las células y la acumulación de sus valores en una cadena. a continuación, empuje esta cadena para el cuadro de texto.
echar un vistazo aquí cómo implementar la iteración:
O en caso de que sólo tiene el valor de la primera venta seleted (o sólo una celda seleccionada, si se selecciona uno)
TextBox1.Text = SelectedCells[0].Value.ToString();
Lo mejor de ambos 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
o, podemos usar algo como esto
dim i = dgv1.CurrentCellAddress.X
dim j = dgv1.CurrentCellAddress.Y
MsgBox(dgv1.Item(i,j).Value.ToString())