2011-01-17 3 views
1

У меня в основном что-то вроде этого:Динамическое добавление кнопки в PlaceHolder в DataGrid

<asp:datagrid id="DGrid" runat="server" AutoGenerateColumns="false"> 
    <asp:TemplateColumn HeaderText="Stuff"> 
    <ItemTemplate> 
     <asp:PlaceHolder id="PH" runat="server" /> 
    </ItemTemplate> 
    </asp:TemplateColumn> 
</asp:datagrid> 

Мне нужно добавить кнопку на PlaceHolder в зависимости от значений данных я связывающим. В настоящий момент я добавляю кнопку после того, как данные привязаны в Page_Load. Проблема в том, что методы привязки данных не вызываются в postbacks, поэтому кнопка исчезает, когда я нажимаю на нее.

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

ответ

1

Как насчет подписки на ItemCreated?

Markup:

<asp:datagrid id="DGrid" runat="server" OnItemCreated="DGrid_ItemCreated" AutoGenerateColumns="false">...</asp:DataGrid> 

Code-за:

protected void DGrid_ItemCreated(object sender, DataGridItemEventArgs e) 
{ 
    var ph e.Item.FindControl("PH") as PlaceHolder; 
    // ... 
} 

UPDATE

Что касается ситуации, когда e.Item.DataItem является null на постбэка: только достоверную информацию (например, с привязкой к данным свойства управления) сохраняется через обратную передачу (если ViewState включен), t он целых данных не выживает. Поэтому вы должны управлять государством самостоятельно. Вы можете сохранить только необходимые данные в ViewState (а не все элементы данных, поскольку они могут взорвать его).

+0

Мне все еще нужно каким-то образом получить доступ к связанным данным в postback - e.Item.DataItem, похоже, к тому времени будет NULL. – hrnt

+0

См. Мое обновление. – volpav

+0

Обычно e.Item.DataItem имеет значение null не из-за проблемы в представлении, а из-за того, что вы создаете строки заголовка или нижнего колонтитула. Попробуйте сделать if (e.Item.DataItem ничего) {return;} и посмотреть, что произойдет. – Peter

Смежные вопросы