Книжник
Зарегистрирован: 15 November 2007
Сообщения: 165
Примеры кода: 0
|
Вложенные динамические контролы в Table - ??? |
12 March 2008 16:07 |
|
|
|
|
Коллеги, пришлось не от хорошей жизни сделать что-то вроде GridView. Нужна была табличка с динамическим заполненеием по дататейблу. При этом в клетках таблицы должны быть вложенные контрольчики. Пронаследовался от Table, в дизайнере состряпал ей хедер, создал свойство DataSource типа DataTable. Присваивается на онЛоаде страницы.
В пререндере контрола сделал примерно следующее:
base.OnPreRender(e);
if (!Page.IsPostBack)
{
int i;
TableRow newRow;
TableCell newCell;
WebControl innerControl; // это создаваемый внутри клетки контрол
DataView tmpView;
for (i = 0; i < DataSource.Rows.Count; i++)
{
newRow = new TableRow();
newRow.EnableViewState = true;
newCell = new TableCell();
newCell.Text = DataSource.Rows[i]["AttrName"].ToString(); ;
newRow.Cells.Add(newCell);
newCell = new TableCell();
newCell.EnableViewState = true;
innerControl = CreateEdit(DataSource.Rows[i]);
newCell.Controls.Add(innerControl);
newRow.Cells.Add(newCell);
Rows.Add(newRow);
}
}
При этом получил следующие вещи:
а) при вызове любого серверного обработчика динамически созданные строки теряются, остаётся только хедер;
б) изменения во вложенных контролах ни на что не влияют, хотя им, вроде, тоже задавались EnableViewState; обработчики изменений, розданные им, не вызываются.
Я так понимаю, что надо каким-то образом обрабатывать ViewState, хотя могу и ошибаться.
У кого есть подобный опыт?
Спасибо. Отец, конечно, сам может. Но у быка лучше получается.
|
|