2009-04-07 13 views
7

Ho un DataGridView con celle da un file di database che contiene dati. Fondamentalmente, voglio ottenere il testo dal celle selezionate nel DataGridView e visualizzarlo in una casella di testo con un clic del pulsante. Il codice per l'evento pulsante di scatto è:Ottieni testo da celle DataGridView selezionate

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 

Tuttavia in TextBox1 ottengo:

System.Windows.Forms.DataGridViewSelectedCellCollection

Sto pensando che isn' t semplice come sembra. Sono uno sviluppatore C che sto imparando VB.NET.

risposta

7

DataGridView.SelectedCells è un insieme di celle, quindi non è così semplice come chiamare ToString() su di esso. Devi passare in rassegna ogni cella della raccolta e ottenere invece il valore di ogni cella.

Quanto segue creerà un elenco delimitato da virgole di tutti i valori delle celle selezionate.

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 dal codice di cui sopra)

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

Quindi devo trovare ogni cella selezionata dall'utente? –

+0

Un po ', ma non è esattamente come lo direi. Non è necessario "trovare" le celle, poiché un riferimento a loro viene presentato nella raccolta. –

+1

Minori miglioramenti nella versione VB.NET: & = invece di + = (entrambi funzionano ovviamente). –

0

In questo caso specifico, il ToString() restituirà il nome dell'oggetto retruned dalla Proprietà SelectedCell. (una raccolta delle celle attualmente selezionate).

Questo comportamento si verifica quando un oggetto non ha implenetation specifica per i metodi ToString().

nel nostro caso, tutto ciò che dovete fare è iterare la collezione delle celle e accumularne i valori in una stringa. quindi spingere questa stringa nel TextBox.

un'occhiata qui come implementare l'iterazione:

msdn

0

O nel caso basta il valore della prima vendita seleted (o solo una cella selezionata, se si è selezionato)

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

Prova questo:

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

Si dovrebbe funzionare :)

0

il meglio di entrambi i mondi .....

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, possiamo usare qualcosa di simile

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

Semplicemente

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

Un sacco di risposte in questa pagina si applicano solo a una singola cella, e OP chiesto per all le celle selezionate.

Se invece si è il contenuto della cella, e non si preoccupano i riferimenti alle celle attuali che sono selezionati, si può solo fare questo:

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 viene cliccato, questo si riempirà TextBox1 con i valori separati da virgola delle celle selezionate.

Problemi correlati