Обновление Gridview с помощью события OnClick - PullRequest
0 голосов
/ 02 марта 2011

Я разрабатываю базовую веб-форму, которая позволяет пользователям искать определенные столбцы в базе данных и отображать эти записи в GridView.У меня есть несколько элементов управления TextBox, которые позволяют пользователям искать имя, идентификатор и т. Д. Я использую LinqToSql для своего слоя доступа к данным.Это ваша основная форма поиска.

Проблема связана с GridView, который я пытаюсь использовать для отображения данных.У меня есть сам запрос в методе события OnClick элемента управления Button.

protected void SearchSpecific_Click(object sender, EventArgs e)
    {
    MyDataContext dbContext = new MyDataContext();
    var results = from row in dbContext.MyTable
                  select row;

    if(TextBoxIsValid(IDNumber))
        results = results.Where(m => m.ID == Int32.Parse(IDNumber.Text));

    if (validationFlag)
    {
        // this part doesn't seem right
        SearchResultDataset.DataSource = results;
        SearchResultDataset.DataBind();
    }
}

Вот сетка, хотя в этом нет ничего особенного:

<asp:GridView ID="SearchResultDataset" runat="server"
    AlternatingRowStyle-CssClass="alt"
    CssClass="search_results"
    GridLines="None"
    AutoGenerateColumns="true"></asp:GridView>

Все идет гладко, пока я не доберусь доМетод DataBind () и исключение NullReferenceException.Святые исключения, Бэтмен!

Отладчик говорит мне, что результаты имеют правильные значения, но я чувствую, что это связано с привязкой источников данных при обратной передаче.Я чувствую, что что-то упустил ... Есть предложения?При необходимости я могу предоставить трассировку стека.

РЕДАКТИРОВАТЬ:

Существует гораздо более серьезная проблема под рукой.Я попытался добавить на свою страницу оба элемента управления LinqDataSource и ObjectDataSource, и оба выбросили исключение NullReferenceException.Я сконструировал оба с использованием графического интерфейса, и они выглядят идеально.

После этого я затем назначил источник данных в методе Page_Load:

try
{
    MyDataContext dbc = new MyDataContext();
    SearchResultDataset.DataSource = dbc.MyTable;
    SearchResultDataset.DataBind();
}
catch (Exception ex)
{
    errText.InnerHtml = ex.ToString();
}

Пришел с этим исключением:

System.Reflection.TargetInvocationException: Property accessor 'IsPostBack' on object 'MySite.MySite' threw the following exception:'Object reference not set to an instance of an object.' ---> System.NullReferenceException: Object reference not set to an instance of an object.

в System.Web.UI.UserControl.get_IsPostBack ()

Исключение определенно вызывается в методе DataBind ().Это поднимает вопрос, что происходит WTF?Я не могу связать источник linqtosql с моим GridView.Кажется, я не могу найти страницу, но где-то читал, что GridView испытывает трудности с привязкой к чему-либо, что не является объектом DataSet.

UPDATE

Используется SqlDataSourceконтроль доступа к базе данных.

1 Ответ

1 голос
/ 02 марта 2011

Похоже, ваша проблема в том, что вы пытаетесь привязать свой dataview к анонимному типу.Как говорится в MSDN:

Создание DataView из запроса, возвращающего анонимные типы, не поддерживается.

Решение: используйте функцию .ToList () для приведения этого var втип данных, который dataview понимает и может работать с ним.

Как это:

SearchResultDataset.DataSource = results.ToList();
...