Изначально в WebMatrix для работы с MxDataGrid (уже писал про него
TyT) есть два готовых источника данных. Один для Acceess
(совсем урезанный. даже удаление не поддерживает) и один для SqlServer.
Однако, не всегда есть возможность передавать SQL комманды напрямую в
базу данных. В некоторых ситуациях, это может существовать свой набор
классов для работы с данными, либо это может быть одна из баз для
которых стандартного DataProvider'а нет (например, Oracle или mySQL).
В такой ситуации самый простой выход - это написание собственного
провайдера данных (некоторый схематичный код ниже).
/// <summary>
/// нужно реализовать абстрактные методы класса
/// Microsoft.Matrix.Framework.Web.UI.DataControl
/// </summary>
public
class CustomDataProvider : DataControl
{
#region
Описываем функциональность данного провайдера
public
override
bool CanDelete { get {
return
true; } }
public
override
bool CanFilter { get {
return
true; } }
public
override
bool CanInsert { get {
return
true; } }
public
override
bool CanSort { get {
return
true; } }
public
override
bool CanUpdate { get {
return
true; } }
#endregion
///
<summary>
///
Операция удаления данных
///
</summary>
///
<param name="listName">
///
Имя источника данных
///
</param>
///
<param name="selectionFilters">
///
Набор пар ключ/значение для идентификации удаляемой записи
///
</param>
///
<returns>количество обработанных записей</returns>
public
override
int Delete(string
listName, IDictionary selectionFilters)
{
throw
new NotImplementedException();
}
///
<summary>
///
Получить от DataProvider именованный источник данных. Например, это
может быть DataView для таблицы (DataTable)
///
</summary>
///
<param name="listName"></param>
///
<returns></returns>
///
<remarks>DataProvider может поддерживать несколько источников данных.
///
Примерно также, как в DataSet может быть несколько таблиц
///
</remarks>
public
override IEnumerable GetDataSource(string
listName)
{
// Тут стоит наложить сортировку на возвращаемый DataView
return ((DataSet) DataSource).Tables[listName].DefaultView;
}
///
<summary>
///
Вставить новую запись
///
</summary>
///
<param name="listName"></param>
///
<param name="values">Новые данные</param>
///
<returns>количество обработанных записей</returns>
public
override
int Insert(string
listName, IDictionary values)
{
throw
new NotImplementedException();
}
/// <summary>
/// Обновить запись
/// </summary>
/// <param name="listName"></param>
/// <param name="selectionFilters">
/// Пары ключ/значение для идентификации обновляемой записи
/// </param>
/// <param name="newValues">Новые данные</param>
/// <returns>количество обработанных записей</returns>
public
override
int Update(string
listName, IDictionary selectionFilters, IDictionary newValues)
{
throw
new NotImplementedException();
}
///
<summary>
///
Базовый источник данных. Например, это может быть DataSet
///
</summary>
public
override
object DataSource { get {
throw
new NotImplementedException(); } }
///
<summary>
///
Тип источника данных. Например, return typeof (DataSet);
///
</summary>
public
override Type UnderlyingDataSourceType { get {
throw
new NotImplementedException(); } }
}
Правильно написанный, DataProvider может сильно упростить работу
работу с таблицами на Web страницах
Источник:
TK's Blog
Последние комментарии