Использование MxDataGrid и custom источника данных



Изначально в 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

Полезные ссылки:

Опубликовал admin
11 Мар, Суббота 2006г.
stimulsoft Скачать StimulsoftReportsNetTrial.zip Скачать StimulsoftReportsWebTrial.zip Stimulsoft Reports.Net Stimulsoft Reports.Web

Объявления

Последние комментарии

Ваше мнение

Для чего мы апгрейдим свой компьютер?: