Erhalten Sie Text von Datagridview ausgewählten Zellen
-
05-09-2019 - |
Frage
Ich habe eine Datagridview mit Zellen aus einer Datenbank-Datei, die Daten enthält. Grundsätzlich mag ich den Text aus den ausgewählt Zellen in der Datagridview bekommen und es in einem Textfeld auf dem Klicken der Schaltfläche angezeigt werden soll. Der Code für die Schaltfläche Click-Ereignis ist:
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
Doch in TextBox1 ich:
System.Windows.Forms.DataGridViewSelectedCellCollection
Ich denke, es ist nicht so einfach wie es scheint. Ich bin ein C-Entwickler nur VB.NET lernen.
Lösung
DataGridView.SelectedCells
ist eine Sammlung von Zellen, so ist es nicht so einfach, wie ToString()
auf sie anrufen. Sie haben in der Sammlung durch jede Zelle in einer Schleife und erhält die Wert jede Zelle statt.
Im Folgenden wird eine durch Kommata getrennte Liste aller ausgewählten Zellen Werte schaffen.
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 ( übersetzt aus dem Code oben)
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
Andere Tipps
Versuchen Sie folgendes:
Dim i = Datagridview1.currentrow.index
textbox1.text = datagridview1.item(columnindex, i).value
Es sollte funktionieren:)
Einfach
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
Viele der Antworten auf dieser Seite nur auf eine einzelne Zelle anwenden und OP fragte 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
geklickt wird, diese TextBox1
mit den kommagetrennte Werte der ausgewählten Zellen füllen wird.
In diesem speziellen Fall wird der ToString () den Namen des von der SelectedCell Property retruned Objekt zurückgeben. (Eine Sammlung der aktuell ausgewählten Zellen).
Dieses Verhalten tritt auf, wenn ein Objekt keine spezifische implenetation für die ToString hat () Methoden.
in unserem Fall alles, was Sie tun müssen, ist die Sammlung der Zellen zu durchlaufen und seine Werte in eine Zeichenfolge zu akkumulieren. dann schieben Sie diese Zeichenfolge an den Text.
haben Sie einen Blick hier, wie die Iteration zu implementieren:
oder im Fall, dass Sie nur den Wert der ersten seleted verkaufen (oder nur eine ausgewählte Zelle, wenn man gewählt wird)
TextBox1.Text = SelectedCells[0].Value.ToString();
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
oder können wir etwas wie folgt verwenden
dim i = dgv1.CurrentCellAddress.X
dim j = dgv1.CurrentCellAddress.Y
MsgBox(dgv1.Item(i,j).Value.ToString())