Запросить базу данных, сохранить результаты как объект, а затем заполнить DataGridView свойствами объекта. - PullRequest
0 голосов
/ 04 августа 2020

Тестирование воды на C#. У меня есть программа Winform, в которой пользователь регистрирует сотрудников через форму. Данные пользователя хранятся в таблице из базы данных SQL Сервера. В другом разделе программы пользователь должен иметь возможность отображать всех зарегистрированных сотрудников и их информацию. Однако я не могу использовать DataSet или DataTable. Итак, я думал о том, чтобы сделать что-то вроде этого (концептуально)

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

Однако я не знаю, как «преобразовать» результаты запроса в отдельные экземпляры класса. Запрос не всегда будет возвращать только одну строку, а несколько из них, поэтому как вы можете сделать это, чтобы каждая строка проходила процесс добавления в качестве значений свойств каждого нового экземпляра, который я храню в list?

Предполагается, что класс примера похож на «Сотрудник» со свойствами «ID», «Имя» и «Должность»

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Вы просто установите свойства в значения DB.

List<Employee> myEmployees = new List<Employee>();
foreach(DataRow dr in myDatatable.Rows)
{
  new myEmployee = new Employee {ID = dr["ID"], Name = dr["Name"], Postion = dr["Postion"]};
  myEmployees.Add(myEmployee);
}
0 голосов
/ 04 августа 2020

Предполагая, что ваша база данных возвращает идентификатор, имя и позицию в качестве переменных, вы можете использовать ObservableCollection для заполнения, например, DataGrid. Первоначально создайте класс, хранящий данные о сотрудниках.

public class Employee
{
  public int ID{get; set;}
  public string name{get; set;}
  public string position{get; set;}
}

Затем в вашем MainWindow определите свойство зависимости (Employees).

public ObservableCollection<Employee> Employees
{
  get{return (ObservableCollection<Employee>) GetValue(EmpProperty);}
  set{SetValue(EmpProperty, value);}
}
public static readonly DependencyProperty EmpProperty = DependencyProperty.Register
(
  "Employees", typeof(ObservableCollection<Employee>),
  typeof(MainWindow),
  new PropertyMetadata(null)
);

В другом месте вашего MainWindow вы получите результат запроса ; для простоты я предполагаю, что три массива ID_Array, name_Array и position_Array хранят элементы count в моем примере

...
Employees = new ObservableCollection<Employee>
{
  for(int i = 0, i < count; i++)
  {
    new Employee
    {
      ID = ID_Array[i],
      name = name_Array[i],
      position = position_Array[i];
    };
  }
}
...
PART_DataGrid.ItemsSource = Employees;

Наконец, в вашем файле xaml объявите свой DataGrid

...
<DataGrid x:Name="PART_DataGrid", AutogenerateColumns="false">
  DataGrid.Columns>
  <!-- Define headers as needed -->
    <DataGridTextColumn Header="Employee ID" Binding="{Binding ID}" />
    <DataGridTextColumn Header="Name" Binding="{Binding name}" />
    <DataGridTextColumn Header="Position" Binding="{Binding position}" />
  </DataGrid.Columns>
</DataGrid>

Я не тестировал код но я надеюсь, что это даст вам базовое c представление о том, как действовать дальше. В основном он должен работать и с WinForms.

С уважением, Мартин

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