Вопрос

У меня есть DataGridView с ячейками из файла базы данных, который содержит данные.В принципе, я хочу получить текст из выбранный ячейки в 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

Однако в Текстовое поле 1 Я получаю:

Система.Windows.Формы.DataGridViewSelectedCellCollection

Я думаю, что это не так просто, как кажется.Я разработчик на C, который только учится VB.NET .

Это было полезно?

Решение

DataGridView.SelectedCells представляет собой набор ячеек, так что это не так просто, как вызвать ToString() на нем.Вы должны перебрать каждую ячейку в коллекции и вместо этого получить значение каждой ячейки.

Ниже будет создан разделенный запятыми список значений всех выбранных ячеек.

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 (Переведенный из приведенного выше кода)

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

Другие советы

Попробуй это:

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

Это должно сработать :)

Просто

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

Многие ответы на этой странице применимы только к одной ячейке, и OP запросил ВСЕ выбранные ячейки.

Если все, что вам нужно, это содержимое ячейки, и вас не волнуют ссылки на фактические выбранные ячейки, вы можете просто сделать это:

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

Когда Button1 при нажатии, это заполнит TextBox1 со значениями выбранных ячеек, разделенных запятыми.

В этом конкретном случае toString() вернет имя объекта, повторно обработанного свойством SelectedCell.( коллекция выбранных в данный момент ячеек).

Такое поведение возникает, когда объект не имеет конкретной реализации для методов toString().

в нашем случае все, что вам нужно сделать, это повторить набор ячеек и преобразовать его значения в строку.затем вставьте эту строку в текстовое поле.

посмотрите здесь, как реализовать итерацию:

msdn

Или в случае, если вам просто нужно значение первой выбранной продажи (или только одной выбранной ячейки, если она выбрана)

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

лучшее из обоих миров.....

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

или мы можем использовать что-то вроде этого

dim i = dgv1.CurrentCellAddress.X
dim j = dgv1.CurrentCellAddress.Y
MsgBox(dgv1.Item(i,j).Value.ToString())
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top