Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
asp:DataGrid, AllowCustomPaging & ItemDataBound
|
|||
|---|---|---|---|
|
#18+
Есть у меня 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; } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2006, 19:16 |
|
||
|
asp:DataGrid, AllowCustomPaging & ItemDataBound
|
|||
|---|---|---|---|
|
#18+
ItemDataBound не может вызываться раньше PageIndexChanged - у тебя ж биндинг вызывается именно из PageIndexChanged. А вообще нужно дебажить что именно у тебя null Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2006, 20:56 |
|
||
|
asp:DataGrid, AllowCustomPaging & ItemDataBound
|
|||
|---|---|---|---|
|
#18+
> не может вызываться раньше Может и не может, но вызывается. Под дебугом как раз и видно. > А вообще нужно дебажить что именно у тебя null свойство DataRow null, т.к. оно инициализируется в null и не присваивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 10:12 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=33918136&tid=1390615]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 373ms |

| 0 / 0 |
