powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / asp:DataGrid, AllowCustomPaging & ItemDataBound
3 сообщений из 3, страница 1 из 1
asp:DataGrid, AllowCustomPaging & ItemDataBound
    #33917488
Аноним
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у меня DataGrid, у которого задан AllowCustomPaging. Внутри ItemTemplate помещен мой Web User Control. Мне нужно, чтобы для каждого инстанса этого Web User Control'а устанавливались два свойства — DataSet общий для всех и DataRow, соответствующий нужному элементу.

Все бы хорошо, но ItemDataBound вызывается раньше, чем PageIndexChanged. А когда внутри PageIndexChanged я вызываю DataGrid1.DataBound(), то ItemDataBound проходит только для заголовков. Таким образом когда очередь доходит до рендеринга контролов — они работают на первой странице и падают с null reference exception на всех остальных.

Вопрос — как внутри MyWebUserControl поиметь ссылки на правильные DataRow?

Код примерно такой:

    protected void Page_Load(object sender, EventArgs e)
    {
        DataGrid1.ItemDataBound += new DataGridItemEventHandler(DataGrid1_ItemDataBound);
        DataGrid1.PageIndexChanged += new DataGridPageChangedEventHandler(DataGrid1_PageIndexChanged);
        if (this.IsPostBack == false)
        {
            this.DataGrid1.VirtualItemCount = GetRowsCount();
            int start = this.DataGrid1.CurrentPageIndex * this.DataGrid1.PageSize;
            FillDataSet(ref ds, start, start + this.DataGrid1.PageSize);
            BindGrid(ds);
        }
    }

    void DataGrid1_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
        this.DataGrid1.CurrentPageIndex = e.NewPageIndex;
        int start = this.DataGrid1.CurrentPageIndex * this.DataGrid1.PageSize;
        FillDataSet(ref ds, start, start + this.DataGrid1.PageSize);
        BindGrid(ds);
    }

    private void BindGrid(DataSet ds)
    {
        DataGrid1.DataSource = ds;
        DataGrid1.DataMember = "TableName";
        //DataGrid1.DataBind();
        this.DataBind();
    }

    void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            DataRow row = ((DataRowView)e.Item.DataItem).Row;
            MyWebUserControl it = (MyWebUserControl)(e.Item.FindControl("MyWebUserControl"));
            if (it == null)
            {
                return;
            }
            it.DataSet = ds;
            it.DataRow = row;
        }
    }
...
Рейтинг: 0 / 0
asp:DataGrid, AllowCustomPaging & ItemDataBound
    #33917610
Dimon aka Manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ItemDataBound не может вызываться раньше PageIndexChanged - у тебя ж биндинг вызывается именно из PageIndexChanged.
А вообще нужно дебажить что именно у тебя null

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
asp:DataGrid, AllowCustomPaging & ItemDataBound
    #33918136
Аноним
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> не может вызываться раньше

Может и не может, но вызывается. Под дебугом как раз и видно.

> А вообще нужно дебажить что именно у тебя null

свойство DataRow null, т.к. оно инициализируется в null и не присваивается.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / asp:DataGrid, AllowCustomPaging & ItemDataBound
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]