2009-04-07 21 views
7

Ich habe eine DataGridView mit Zellen aus einer Datenbankdatei, die Daten enthält. Grundsätzlich möchte ich den Text aus den ausgewählten Zellen im DataGridView abrufen und in einem Textfeld mit einem Klick auf den Button anzeigen lassen. Der Code für die Schaltfläche Click-Ereignis ist:Get Text von DataGridView ausgewählten Zellen

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 

jedoch in TextBox1 ich:

System.Windows.Forms.DataGridViewSelectedCellCollection

Ich denke, es isn‘ So einfach wie es scheint. Ich bin ein C-Entwickler, der gerade VB.NET lernt.

Antwort

7

DataGridView.SelectedCells ist eine Sammlung von Zellen, so dass es nicht so einfach ist, ToString() darauf zu nennen. Sie müssen jede Zelle in der Sammlung durchlaufen und stattdessen den Wert jeder Zelle abrufen.

Im Folgenden wird eine durch Kommas getrennte Liste aller ausgewählten Zellenwerte erstellt.

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 aus dem obigen Code)

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

Also muss ich jede Zelle finden, die der Benutzer auswählt? –

+0

Art von, aber das ist nicht genau, wie ich es sagen würde. Sie müssen die Zellen nicht "finden", da Ihnen in der Sammlung ein Verweis auf sie angezeigt wird. –

+1

Geringfügige Verbesserung in der VB.NET-Version: & = statt + = (beide funktionieren natürlich). –

0

In diesem speziellen Fall das toString() den Namen des Objekts zurück retruned durch die SelectedCell-Eigenschaft (eine Sammlung der aktuell ausgewählten Zellen).

Dieses Verhalten tritt auf, wenn ein Objekt keine spezifische Implementierung für die ToString() -Methoden hat.

In unserem Fall müssen Sie nur die Sammlung der Zellen wiederholen und ihre Werte in einer Zeichenfolge akkumulieren. Drücken Sie dann diese Zeichenfolge auf die TextBox.

haben Sie einen Blick hier, wie die Iteration zu implementieren:

msdn

0

Oder im Fall müssen Sie nur den Wert der ersten seleted verkaufen (oder nur eine ausgewählte Zelle, wenn man gewählt ist)

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

Versuchen Sie folgendes:

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

Es sollte funktionieren :)

0

das Beste aus beiden Welten .....

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

oder wir so etwas wie dieses

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

Einfach

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

Viele der Antworten auf dieser Seite gelten nur für eine einzelne Zelle verwendet werden kann, und OP gefragt nach alle die ausgewählten Zellen.

Wenn alles, was Sie wollen, ist der Inhalt der Zelle, und Sie kümmern sich nicht um Verweise auf die tatsächlichen Zellen, die ausgewählt werden, können Sie dies nur tun:

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 

Wenn Button1 angeklickt wird, wird diese füllen TextBox1 mit den kommagetrennten Werten der ausgewählten Zellen.

Verwandte Themen