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.

War es hilfreich?

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:

Msdn

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())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top