DataGridView с потоком vb.net? - PullRequest
       4

DataGridView с потоком vb.net?

0 голосов
/ 22 февраля 2019

** У меня проблема, когда я использую DataGridView1 с потоком, я получаю пустые строки, такие как изображение **

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim thread As New Thread(AddressOf grid)

    thread.Start()
End Sub
Public Function grid()

    For i As Int16 = 1 To 50
        Invoke(Sub()
                   DataGridView1.Rows.Add(i)
                   DataGridView1.Refresh()
               End Sub)

    Next
End Function

https://i.stack.imgur.com/KOXRR.jpg

1 Ответ

0 голосов
/ 22 февраля 2019

Это прекрасный пример того, почему вы ДОЛЖНЫ прочитать соответствующую документацию, особенно если что-то не работает так, как вы ожидаете.Если вы потрудились прочитать документацию по методу Add, который вы вызываете здесь , то вы бы увидели, что эта конкретная перегрузка добавляет определенное количество строк в сетку, и это все.Ни в коем случае он не заполняет эти строки какими-либо данными.У вас есть код, который добавит в вашу сетку 1 + 2 + 3 + 4 + ... + 48 + 49 + 50 пустых строк.Если вам действительно нужно добавлять по одной строке каждый раз, когда i - это данные, отображаемые в этой строке, то вам нужно вызвать одну из перегрузок Add, которая это делает, или вызвать перегрузку без аргументов длядобавьте одну строку, затем получите эту строку и явно установите Value ячейки.

РЕДАКТИРОВАТЬ: Самый простой способ добавить строку с i в качестве данных - вызвать перегрузку Addэто принимает массив значений ячеек.Если у вас есть только одна ячейка, вы используете массив с одним элементом:

DataGridView1.Rows.Add({i})

В скобках указано, что содержимое является массивом.Это сокращенно для этого:

DataGridView1.Rows.Add(New Integer() {i})

Обратите внимание, что если вы передадите один Integer, будет вызвана перегрузка с одним параметром Integer, так как это наиболее близкое совпадение.Если бы вы пропустили несколько дискретных Integers, например,

DataGridView1.Rows.Add(i, i)

, у вас не возникло бы той же проблемы, потому что нет перегрузки с несколькими параметрами Integer.В этом случае будет вызвана перегрузка, которая принимает массив Objects.Параметр этой перегрузки объявлен ParamArray, что означает, что вы можете передавать либо несколько отдельных объектов, либо один массив.Другой вариант - привести ваш Integer к типу Object, что также вызовет перегрузку, которая принимает массив Objects:

DataGridView1.Rows.Add(CObj(i))

Когда вы вызываете перегруженный метод,будет вызвано самое близкое допустимое совпадение, поэтому убедитесь, что ваши аргументы соответствуют параметрам перегрузки, которую вы хотите вызвать, и убедитесь, что вы понимаете, что делает каждая перегрузка.ВСЕГДА читайте документацию, если вы не уверены на 100%.Клавиша F1 и меню «Справка» находятся там по причине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...