2009-04-07 5 views
7

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

Однако в TextBox1 я получаю:

System.Windows.Forms.DataGridViewSelectedCellCollection

Я думаю, это ISN» так просто, как кажется. Я разработчик C, просто изучая VB.NET.

ответ

7

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

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

Итак, я должен найти каждую ячейку, которую пользователь выбирает? – 2009-04-07 04:42:21

+0

Вид, но это не совсем так, как я выразился. Вам не нужно «находить» ячейки, так как ссылки на них представлены вам в коллекции. –

+1

Незначительное улучшение версии VB.NET: & = вместо + = (оба работают, конечно). –

0

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

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

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

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

msdn

0

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

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

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

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

Он должен работать :)

0

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

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

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

dim i = dgv1.CurrentCellAddress.X 
dim j = dgv1.CurrentCellAddress.Y 
MsgBox(dgv1.Item(i,j).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

Много ответов на этой странице, относятся только к одной ячейке, и О.П. попросил все выбранные ячейки.

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

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 с разделенными запятыми значениями выбранных ячеек.

Смежные вопросы