Реализация привязки данных GridDesktop в листах

Создание образца базы данных

  1. Создайте образец базы данных для использования в примере. Мы использовали Microsoft Access для создания образца базы данных с таблицей Products (схема ниже).

todo:image_alt_text

  1. В таблицу Products добавлены три фиктивные записи. Записи в таблице Products

todo:image_alt_text

Создание образца приложения

Теперь создайте простое десктопное приложение в Visual Studio и выполните следующие действия.

  1. Перетащите элемент управления “GridControl” из панели инструментов на форму.
  2. Перетащите четыре кнопки из панели инструментов внизу формы и установите их текстовое свойство соответственно как Привязать рабочий лист, Добавить строку, Удалить строку и Обновить в базе данных.

Добавление пространства имен и объявление глобальных переменных

Поскольку в этом примере используется база данных Microsoft Access, добавьте пространство имен System.Data.OleDb в верхней части кода.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// Adding namespace to the top of code
using System.Data.OleDb;

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

  1. Объявите глобальные переменные.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// Declaring global variable
OleDbDataAdapter adapter;
OleDbCommandBuilder cb;
DataSet ds;

Заполнение DataSet данными из базы данных

Теперь подключитесь к образцовой базе данных, чтобы извлечь данные и заполнить объект DataSet.

  1. Используйте объект OleDbDataAdapter для соединения с нашей образцовой базой данных и заполните DataSet данными, извлеченными из таблицы Products в базе данных, как показано в приведенном ниже коде.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
private void DataBindingFeatures_Load(object sender, EventArgs e)
{
// The path to the documents directory.
string dataDir = Utils.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// Creating Select query to fetch data from database
string query = "SELECT * FROM Products ORDER BY ProductID";
// Creating connection string to connect with database
string conStr = @"Provider=microsoft.jet.oledb.4.0;Data Source=" + dataDir + "dbDatabase.mdb";
// Creating OleDbDataAdapter object that will be responsible to open/close connections with database, fetch data and fill DataSet with data
adapter = new OleDbDataAdapter(query, conStr);
// Setting MissingSchemaAction to AddWithKey for getting necesssary primary key information of the tables
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
/*
* Creating OleDbCommandBuilder object to create insert/delete SQL commmands
* automatically that are used by OleDbDatAdapter object for updating
* changes to the database
*/
cb = new OleDbCommandBuilder(adapter);
// Creating DataSet object
ds = new DataSet();
// Filling DataSet with data fetched by OleDbDataAdapter object
adapter.Fill(ds, "Products");
}

Привязка рабочего листа с DataSet

Привяжите рабочий лист с таблицей Products из DataSet:

  1. Получить доступ к желаемому рабочему листу.
  2. Привязать рабочий лист к таблице продуктов DataSet.

Добавьте следующий код в событие нажатия кнопки Привязать рабочий лист.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// Accessing the worksheet of the Grid that is currently active
Worksheet sheet = gridDesktop1.GetActiveWorksheet();
// Binding the Worksheet to Products table by calling its DataBind method
sheet.DataBind(ds.Tables["Products"], "");

Установка заголовков столбцов рабочего листа

Привязанный рабочий лист успешно загружает данные, но заголовки столбцов по умолчанию обозначены A, B и C. Было бы лучше установить заголовки столбцов в имена столбцов в таблице базы данных.

Для установки заголовков столбцов рабочего листа:

  1. Получить подписи для каждого столбца DataTable (Products) в DataSet.
  2. Назначить подписи заголовкам столбцов рабочего листа.

Добавьте код, написанный в событии нажатия кнопки Привязать рабочий лист, со следующим отрывком кода. Таким образом, старые заголовки столбцов (A, B и C) будут заменены на ProductID, ProductName и ProductPrice.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// Iterating through all columns of the Products table in DataSet
for (int i = 0; i < ds.Tables["Products"].Columns.Count; i++)
{
// Setting the column header of each column to the column caption of Products table
sheet.Columns[i].Header = ds.Tables["Products"].Columns[i].Caption;
}

Настройка ширины и стилей столбцов

Для улучшения внешнего вида рабочего листа можно установить ширину и стили столбцов. Например, иногда заголовок столбца или значение внутри столбца состоит из большого количества символов, которые не помещаются в ячейке. Для решения таких проблем Aspose.Cells.GridDesktop поддерживает изменение ширин столбцов.

Добавьте следующий код в кнопку Привязать рабочий лист. Ширина столбцов будет настроена в соответствии с новыми параметрами.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// Customizing the widths of columns of the worksheet
sheet.Columns[0].Width = 70;
sheet.Columns[1].Width = 120;
sheet.Columns[2].Width = 80;

Aspose.Cells.GridDesktop также поддерживает применение пользовательских стилей к столбцам. Следующий код, добавленный к кнопке Привязать рабочий лист, настраивает стили столбцов, делая их более презентабельными.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// Iterating through each column of the worksheet
for (int i = 0; i < sheet.ColumnsCount; i++)
{
// Getting the style object of each column
Style style = sheet.Columns[i].GetStyle();
// Setting the color of each column to Yellow
style.Color = Color.Yellow;
// Setting the Horizontal Alignment of each column to Centered
style.HAlignment = HorizontalAlignmentType.Centred;
// Setting the style of column to the updated one
sheet.Columns[i].SetStyle(style);
}

Теперь запустите приложение и нажмите кнопку Привязать рабочий лист.

Добавление строк

Чтобы добавить новые строки на рабочий лист, используйте метод AddRow класса Worksheet. Это добавляет пустую строку внизу, а новая строка данных добавляется в источник данных (здесь новая строка данных добавляется в DataTable набора данных). Разработчики могут добавлять столько строк, сколько им нужно, вызывая метод AddRow снова и снова. Когда строка добавлена, пользователи могут ввести в нее значения.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// Adding new row to the worksheet
gridDesktop1.GetActiveWorksheet().AddRow();

Удаление строк

Aspose.Cells.GridDesktop также поддерживает удаление строк с помощью метода RemoveRow класса Worksheet. Удаление строки с использованием Aspose.Cells.GridDesktop требует указания индекса удаляемой строки.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// Getting the index of the focused row
int focusedRowIndex = gridDesktop1.GetActiveWorksheet().GetFocusedCell().Row;
// Removing the focused row fro the worksheet
gridDesktop1.GetActiveWorksheet().RemoveRow(focusedRowIndex);

Добавьте вышеуказанный код в кнопку Удалить строку и запустите приложение. Несколько записей отображаются до удаления строки. Выбор строки и нажатие кнопки Удалить строку удаляет выбранную строку.

Сохранение изменений в базе данных

Наконец, чтобы сохранить любые изменения, внесенные пользователями в таблицу, обратно в базу данных, используйте метод Update объекта OleDbDataAdapter. Метод Update принимает источник данных (DataSet, DataTable и т. д.) таблицы для обновления базы данных.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// Accessing the worksheet of the Grid that is currently active
Worksheet sheet = gridDesktop1.GetActiveWorksheet();
// Updating the database according to worksheet data source
adapter.Update((DataTable)sheet.DataSource);
  1. Добавьте вышеуказанный код к кнопке Обновить в базе данных.
  2. Запустите приложение.
  3. Выполните некоторые операции с данными таблицы, возможно, добавив новые строки и редактируя или удаляя существующие данные.
  4. Затем щелкните по Обновить в базе данных, чтобы сохранить изменения в базе данных.
  5. Проверьте базу данных, чтобы убедиться, что записи таблицы были соответственно обновлены.