Получение текста из выбранных ячеек DataGridView
-
05-09-2019 - |
Вопрос
У меня есть 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().
в нашем случае все, что вам нужно сделать, это повторить набор ячеек и преобразовать его значения в строку.затем вставьте эту строку в текстовое поле.
посмотрите здесь, как реализовать итерацию:
Или в случае, если вам просто нужно значение первой выбранной продажи (или только одной выбранной ячейки, если она выбрана)
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())