2009-04-07 33 views
7

Tengo un DataGridView con celdas de un archivo de base de datos que contiene datos. Básicamente, quiero obtener el texto de celdas seleccionadas en DataGridView y mostrarlas en un cuadro de texto con un clic del botón. El código para el evento de clic de botón es:Obtener texto de las celdas seleccionadas de DataGridView

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 ISN' tan simple como parece. Soy un desarrollador de C que acaba de aprender VB.NET.

Respuesta

7

DataGridView.SelectedCells es una colección de celdas, por lo que no es tan simple como llamar al ToString() en él. Tienes que pasar por cada celda de la colección y obtener el valor de cada celda en su lugar.

Lo siguiente creará una lista delimitada por comas de todos los valores de 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 (Translated desde el 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 
+0

¿Debo encontrar cada celda que el usuario selecciona? –

+0

Un poco, pero esa no es exactamente la forma en que lo pondría. No tiene que "encontrar" las celdas, ya que se le presenta una referencia en la colección. –

+1

Mejora menor en la versión de VB.NET: & = en lugar de + = (ambos funcionan, por supuesto). –

0

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 una implementación específica para los métodos ToString().

en nuestro caso, todo lo que tienes que hacer es iterar la colección de las celdas y acumular sus valores en una cadena. luego, inserta esta cadena en el TextBox.

echar un vistazo aquí cómo implementar la iteración:

msdn

0

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(); 
6

Prueba esto:

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

debería funcionar :)

0

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 
0

o, podemos usar algo como esto

dim i = dgv1.CurrentCellAddress.X 
dim j = dgv1.CurrentCellAddress.Y 
MsgBox(dgv1.Item(i,j).Value.ToString()) 
4

Simplemente

MsgBox(GridView1.CurrentCell.Value.ToString) 
2
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 
0

Muchas de las respuestas en esta página sólo se aplican a una sola celda, y OP pidió todas 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 en Button1, esto va a llenar TextBox1 con los valores separados por comas de las celdas seleccionadas.

Cuestiones relacionadas