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.

¿Fue útil?

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:

MSDN

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())
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top