2009-04-07 37 views
7

Tôi có một DataGridView với các ô từ tệp cơ sở dữ liệu chứa dữ liệu. Về cơ bản, tôi muốn lấy văn bản từ các ô được chọn trong DataGridView và hiển thị văn bản đó trong hộp văn bản khi nhấp vào nút. Các mã cho sự kiện nhấn nút là:Nhận văn bản từ DataGridView các ô được chọn

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 

Tuy nhiên trong TextBox1 tôi nhận được:

System.Windows.Forms.DataGridViewSelectedCellCollection

Tôi nghĩ nó isn' t đơn giản như nó có vẻ. Tôi là một nhà phát triển C chỉ học VB.NET.

Trả lời

7

DataGridView.SelectedCells là tập hợp các ô, vì vậy nó không đơn giản như gọi ToString() trên đó. Bạn phải lặp qua từng ô trong bộ sưu tập và thay thế giá trị của mỗi ô.

Sau đây sẽ tạo danh sách được phân cách bằng dấu phẩy của tất cả các giá trị của các ô đã chọn.

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 từ mã ở trên)

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

Vì vậy, tôi phải tìm từng ô mà người dùng chọn? –

+0

Loại, nhưng đó không phải là cách tôi đặt nó. Bạn không cần phải "tìm" các tế bào, như một tham chiếu đến chúng được trình bày cho bạn trong bộ sưu tập. –

+1

Cải thiện nhỏ trong phiên bản VB.NET: & = thay vì + = (cả hai công việc của khóa học). –

0

Trong trường hợp cụ thể này, ToString() sẽ trả về tên của đối tượng ðã nộp lại Thuộc tính SelectedCell. (tập hợp các ô hiện đang được chọn).

Hành vi này xảy ra khi đối tượng không có implenetation cụ thể cho các phương thức ToString().

trong trường hợp của chúng tôi, tất cả những gì bạn phải làm là lặp lại tập hợp các ô và tích lũy các giá trị của nó vào một chuỗi. sau đó đẩy chuỗi này vào TextBox.

có một cái nhìn ở đây làm thế nào để thực hiện lặp đi lặp lại:

msdn

0

Hoặc trong trường hợp bạn chỉ cần giá trị của bán seleted đầu tiên (hoặc chỉ là một ô được chọn nếu được chọn)

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

Hãy thử điều này:

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

Nó sẽ làm việc :)

0

điểm tốt nhất của cả hai thế giới .....

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

hay, chúng ta có thể sử dụng một cái gì đó như thế này

dim i = dgv1.CurrentCellAddress.X 
dim j = dgv1.CurrentCellAddress.Y 
MsgBox(dgv1.Item(i,j).Value.ToString()) 
4

Đơn giản chỉ cần

MsgBox(GridView1.CurrentCell.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

Rất nhiều các câu trả lời trên trang này chỉ áp dụng đối với một tế bào duy nhất, và OP yêu cầu tất cả các ô được chọn.

Nếu tất cả các bạn muốn là các nội dung di động, và bạn không quan tâm đến tài liệu tham khảo cho các tế bào thực tế được lựa chọn, bạn chỉ có thể làm điều này:

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 

Khi Button1 được nhấp, điều này sẽ điền TextBox1 với các giá trị được phân cách bằng dấu phẩy của các ô đã chọn.

Các vấn đề liên quan