Метод выбора источника данных объекта, ничего не возвращающий при вызове кода - PullRequest
3 голосов
/ 28 сентября 2010

У меня есть ObjectDataSource с правильными настройками SelectMethod и SelectParameters. Источник данных связан с представлением сетки, которое успешно отображает данные при загрузке страницы.

Мне нужна возможность перезапустить метод Select, определенный ObjectDataSource, для хранения в переменной и манипулирования элементами в ней. Проблема, с которой я постоянно сталкиваюсь, заключается в том, что вызов метода .Select() всегда возвращает 0 строк, несмотря на то, что он правильно заполняет сетку.

Есть ли причина, по которой я не могу вручную перезапустить метод Select() для источника данных объекта?

Обновление 2:

Вот как я могу настроить ObjectDataSource:

myObjectDataSource.TypeName = typeof(MyDataAccessObject).ToString();
myObjectDataSource.SelectMethod = "GetBy" + stringVariable;
myObjectDataSource.SelectCountMethod = "GetCountBy" + stringVariable;
myObjectDataSource.EnablePaging = true;

Обновление 1:

Я запускаю Select() по событию OnClick кнопки ссылки:

protected void LinkButton1_Click(object sender, EventArgs e)
{
    SetupDataSource(); // populates the objSource's SelectMethod, SelectParameters and TypeName etc.
    var items = objSource.Select();
    int count = items.Count(); // returns 0;
}

Объект ObjectDataSource настроен (установлены параметры SelectMethod и SelectParameters) в событии Page_Load.

ObjectDataSource определение:

<asp:ObjectDataSource ID="objSource" runat="server" EnablePaging="True" SortParameterName="sortExpression" ></asp:ObjectDataSource>

GridView определение:

        <asp:GridView 
        ID="myGridView" 
        runat="server" 
        DataSourceID="objSource"
        AllowPaging="true"
        ShowHeader="true" 
        AutoGenerateColumns="false"
        AllowSorting="true" 
        Width="100%" >

Ответы [ 3 ]

1 голос
/ 07 октября 2010

Оказывается, что метод базового объекта доступа к данным учел нумерацию страниц и возвращал .Take(maximumRows), который всегда был 0.

В качестве обходного пути я программно отключил разбиение на страницы с помощью myObjectDataSource.EnablePaging = false;, затем создал новую функцию, которая не учитывает нумерацию страниц (требуется новая функция, поскольку ObjectDataSource искал функцию с определенными параметрами). *

0 голосов
/ 02 октября 2010

У меня была похожая проблема раньше. Я думаю, что .Select () реализован с использованием DataReader, и как только Select был вызван, когда считыватель пуст, поэтому любой последующий вызов .Select или .Count () вернет пустой результат.

Следовательно, вы можете использовать .ToList () для сохранения результата в списке, а затем просто продолжать его повторное использование.

0 голосов
/ 29 сентября 2010

Вы не упоминаете, когда (в каком случае вы пытаетесь повторно привязать к источнику данных) Фрагмент короткого кода может помочь.

Если вы находитесь в Postback, то Gridview не перепривязываются при обратной передаче, их строки возвращаются из состояния просмотра. Сброс DatasourceID gridview к ID источника данных объекта при загрузке страницы (или init?) Приведет к восстановлению gridview.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...