سؤال

لدي 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.datagraidviewscellecollection.

أنا أفكر في أنها ليست بسيطة كما يبدو. أنا مطور ج مجرد تعلم vb.net.

هل كانت مفيدة؟

المحلول

DataGridView.SelectedCells هي مجموعة من الخلايا، لذلك ليست بسيطة مثل الاتصال ToString() عليه. يجب عليك حلقة من خلال كل خلية في المجموعة واحصل على قيمة كل خلية بدلا من ذلك.

سيؤدي ما يلي إلى إنشاء قائمة محددة بفاصلة من جميع قيم الخلايا المحددة.

ج #

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

ينطبق الكثير من الإجابات على هذه الصفحة فقط على خلية واحدة، وطلب التشغيل الكل الخلايا المحددة.

إذا كان كل ما تريده هو محتويات الخلية، ولا تهتم بالإشارات إلى الخلايا الفعلية المحددة، فيمكنك القيام بذلك فقط:

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 () اسم الكائن الذي تم إعادة تشغيله بواسطة خاصية SelectCell. (مجموعة من الخلايا المحددة حاليا).

يحدث هذا السلوك عندما لا يحتوي كائن على تنفيذ محددة لطرائق 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