Нужен совет по вводу данных в DataGridView в vb.Net - PullRequest
1 голос
/ 05 мая 2011

Мне нужен небольшой совет по работе с DataGridView в Visual Basic .Net. Я впервые играю с DataGridView. Моя программа - загрузить файл .txt, содержащий данные о каждой комнате в здании, и отобразить их в DataGridView.

Вот часть файла, показывающая 2 комнаты:

1;1812;1812;F18;T1;26808.16;.00;.00;.00;.00;.00;.00;
1;1813;1813;F18;T1;24000.00;3500.00;.00;300.00;.00;.00;.00

Комната - это однострочная строка, оканчивающаяся символом конца строки.

У меня нет проблем с загрузкой файла и получением всей этой информации. Я храню данные каждой комнаты в объекте класса Room и помещаю их в список.

Прямо сейчас я поместил все свойства комнаты в столбцы сетки данных следующим образом: edit columns

Теперь, как я могу поместить данные всех этих комнат в сетку? Сначала я попытался выполнить http://www.dotnetperls.com/datagridview-vbnet, но установка DataSource для списка классов Room, имитирующего данную ссылку, ничего не показывает в виде сетки. Как мы можем сказать программе связывать строки сетки со списком объектов? Или я делаю это неправильно?

Так что любые советы приветствуются. Как мы это делаем?

Ответы [ 3 ]

3 голосов
/ 05 мая 2011

Я думаю, вы будете приятно удивлены тем, насколько просто это сделать с BindingSources и Visual Studio.

  1. Создайте свой класс комнаты (я полагаю, уже сделано)
  2. Создайте свой проект
  3. Установите свой класс в качестве источника данных вашего DGV:

    • Щелкните смарт-тег DGV (или поле DataSource в списке свойств DGV)и в раскрывающемся меню «Выбор источника данных» выберите «Добавить источник данных проекта ...»
    • В «Мастере настройки источника данных» выберите «Объект» и нажмите «Далее»
    • Перейдите в структуру классов вашей сборки ввыберите класс, созданный на шаге 1, и нажмите кнопку «Далее»
    • . Нажмите «Готово», чтобы закрыть мастер.

    . Вы заметите, что в ваш проект был добавлен новый BindingSource.Вы будете использовать этот BindingSource для привязки ваших объектов List of Room к вашему DGV.Ваш код будет выглядеть примерно так после заполнения List комнат:

    roomBindingSource.DataSource = roomList
    

Обратите внимание, что вы начнете с DataGridView без столбцов.После выполнения указанных выше действий ваш DGV будет заполнен столбцами в зависимости от доступности полей в классе, к которому вы привязаны.На этом этапе вы можете настроить внешний вид столбцов, например удалить / добавить и т. Д.

1 голос
/ 04 февраля 2013

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, _
           ByVal e As System.EventArgs) Handles MyBase.Load
' Uses Test class from above.
Dim list = New List(Of Test)
list.Add(New Test("Mac", 2200))
list.Add(New Test("PC", 1100))
DataGridView1.DataSource = list
End Sub

Private Sub DataGridView1_SelectionChanged(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) _
                       Handles DataGridView1.SelectionChanged
' Get the current cell location.
Dim y As Integer = DataGridView1.CurrentCellAddress.Y
Dim x As Integer = DataGridView1.CurrentCellAddress.X

' Write coordinates to console.
Console.WriteLine(y.ToString + " " + x.ToString)
End Sub

Конечный класс

1 голос
/ 05 мая 2011

Ваша проблема в том, что вы используете конструктор для создания своих столбцов, а затем не связываете свойства DataSource с этими столбцами.

Ссылка, которую вы разместили, говорит об автоматическом создании столбцов на основе источника данных, которыйэто список объектов, по этой ссылке они не создают столбцы в конструкторе, а вместо этого полагаются на свойство AutoGenerateColumns, установленное в true для DataGridView.

. На форуме есть сообщение здесь , который говорит о том, что вам нужно сделать.Он также достаточно хорошо описан для MSDN .

В основном вам необходимо установить DataPropertyName для каждого столбца, чтобы он соответствовал желаемому свойству вашего объекта.

Так что еслиВаш объект выглядит следующим образом:

class Room
{
    public string RoomName() {get; set;}
}

Вам необходимо установить для свойства DataPropertyName значение RoomName для столбца имени комнаты в конструкторе сетки.

...