Как передать данные из связанных элементов DataGridView в элемент ReportViewer?

Как правильно передать данные из двух DataGridView в ReportViewer, чтобы в выбранной накладной отображалась шапка (номер, дата, ФИО и т.д.) из первого DataGridView и список содержимого из второго DataGridView? Как создать и использовать dataset для настройки отчета на основе этих данных?
Изображение к вопросу
  • 22 ноября 2023 г. 12:05
Ответы на вопрос 1
Для передачи данных из DataGridView в ReportViewer, вам нужно создать dataset и перенести данные из DataGridView в него. Затем вы можете использовать этот dataset в ReportViewer для настройки отчета.

Вот шаги, которые вы можете выполнить для этого:

1. Создайте новый dataset, нажав правой кнопкой мыши на вашем проекте в дереве решений -> Добавить -> Новый элемент -> DataSet.
2. Откройте дизайнер dataset и добавьте таблицы, которые нужны для хранения данных из DataGridView. Для каждого DataGridView создайте отдельную таблицу.
3. Добавьте столбцы в таблицы dataset, соответствующие столбцам в DataGridView. Вы можете сделать это, перетаскивая столбцы из окна серверного обозревателя данных на таблицу в дизайнере dataset.
4. В вашем коде C# создайте экземпляр вашего dataset и заполните его данными из DataGridView. Например, предположим, что вашы DataGridView названы dataGridView1 и dataGridView2, и вы хотите передать данные из них в отчет.
   
   ```csharp
   // Создайте экземпляр вашего dataset
   YourDataSet dataset = new YourDataSet();

   // Заполните таблицу шапки данными из dataGridView1
   foreach (DataGridViewRow row in dataGridView1.Rows)
   {
       // Создайте новую строку в таблице шапки вашего dataset
       DataRow dataRow = dataset.HeaderTable.NewRow();

       // Заполните значениями из dataGridView1
       dataRow["Номер"] = row.Cells["Номер"].Value.ToString();
       dataRow["Дата"] = row.Cells["Дата"].Value.ToString();
       dataRow["ФИО"] = row.Cells["ФИО"].Value.ToString();

       // Добавьте строку в таблицу шапки вашего dataset
       dataset.HeaderTable.Rows.Add(dataRow);
   }

   // Заполните таблицу содержимого данными из dataGridView2
   foreach (DataGridViewRow row in dataGridView2.Rows)
   {
       // Создайте новую строку в таблице содержимого вашего dataset
       DataRow dataRow = dataset.ContentTable.NewRow();

       // Заполните значениями из dataGridView2
       dataRow["Столбец1"] = row.Cells["Столбец1"].Value.ToString();
       dataRow["Столбец2"] = row.Cells["Столбец2"].Value.ToString();

       // Добавьте строку в таблицу содержимого вашего dataset
       dataset.ContentTable.Rows.Add(dataRow);
   }
   ```
5. Теперь вы можете использовать ваш dataset в ReportViewer для настройки отчета. В окне дизайнера отчетов перетащите нужные поля из таблиц вашего dataset на ваш отчет.

   Это можно сделать с помощью контекстного меню ReportViewer -> Отчеты -> Встраивание экземпляра типа... -> Использование экземпляра типа существующего типа -> Выберите ваш dataset.

   Затем в окне Встраивание экземпляра типа выберите таблицы dataset, которые вы добавили в шаге 2, и перетащите поля на ваш отчет.

   Теперь вы можете настроить ваш отчет, используя эти данные.

Надеюсь, это поможет вам передать данные из DataGridView в ReportViewer и настроить ваш отчет.
Похожие вопросы