Чтение данных из BaseDataBoundControl.DataSource (ASP.NET GridView) - PullRequest
0 голосов
/ 02 июня 2009

У меня есть ASP.NET 3.5 GridView в WebForm. GridView получает данные из ObjectDataSource, который устанавливается через свойство DataSourceID в коде впереди. ObjectDataSource возвращает список пользовательских объектов класса данных (просто класс с открытыми свойствами) для заполнения GridView.

То, что я хочу сделать, - это использовать a List, используемый GridView, в другом методе code-behind. На высоком уровне: 1. GridView загружается со списком данных из ObjectDataSource. 2. В методе GridView.OnDataBound я вызываю GridView.DataSource, чтобы получить объект List. 3. Я перечисляю Список и использую те же данные для выполнения других операций.

Теория состоит в том, что на один метод дублируется вызов метода и на один вызов обращается к внутренней базе данных.

Я пытался вызвать DataSource из метода GridView 'DataBound и вызвать GridView.Rows [x] .DataItem. В каждом случае я получаю только исключение Null-ссылки («Ссылка на объект не установлена ​​для экземпляра объекта»).

Есть ли способ добиться того, чего я добиваюсь?

Ответы [ 2 ]

0 голосов
/ 01 июля 2009

Но вы хотите событие onRowDataBound? Похоже, вам нужно событие onDataBound для всего источника данных GridView ...

Так что вам не обязательно нужен один экземпляр (строка) CustomDataClass, вы хотите, чтобы весь массив строк CustomDataClass [] использовал где-то еще.

HELP! Мне это тоже нужно.

****** UPDATE ******

Я нашел ответ. Сделайте это, как показано ниже, и установите событие OnSelected в вашем объектном источнике данных:

protected void ObjectDataSource_Selected (отправитель объекта, ObjectDataSourceStatusEventArgs e) { ObjectListRow [] objectArray = (ObjectListRow []) e.ReturnValue; Список objectList = objectArray.ToList (); }

Оказывается, мой источник данных был массивом, но если у вас есть List <>, просто приведите e.ReturnValue в качестве List.

ЛЕГКИЙ СЫР.

0 голосов
/ 02 июня 2009

Если я вас правильно понимаю, вам нужно событие OnRowDataBound . Таким образом, вы можете использовать данные из строки, которая была только привязана к данным:

protected void gvGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    CustomDataClass data = e.Row.DataItem as CustomDataClass;
    if (data != null) 
    {
        // access data here...
    }
}
...