ASP.NET: элементы управления доступом, объявленные в TemplateColumn DataGrid

ASCX-файл:

<asp:datagrid runat="server" id="gridFormFields" datakeyfield="FieldID"
autogeneratecolumns="False" 
onitemcommand="gridFormFields_ItemCommand" onitemdatabound="gridFormFields_ItemDataBound">
<columns>
    <asp:templatecolumn>
        <itemtemplate>
            <asp:imagebutton runat="server" id="buttonMoveUpFormField" resourcekey="buttonMoveUpFormField"
            commandname="Item" commandargument="MoveUp" imageurl="~/images/up.gif" />
        </itemtemplate>
    </asp:templatecolumn>
    <asp:templatecolumn>
        <itemtemplate>
            <asp:imagebutton runat="server" id="buttonMoveDownFormField" resourcekey="buttonMoveDownFormField" 
            commandname="Item" commandargument="MoveDown" imageurl="~/images/dn.gif" />
        </itemtemplate>
    </asp:templatecolumn>
</columns>

Code behind:

protected void gridFormFields_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        (e.Item.FindControl("buttonMoveUpFormField") as ImageButton)
         .Visible = gridFormFields.Items.Count > 1 && e.Item.ItemIndex > 0;

        (e.Item.FindControl("buttonMoveDownFormField") as ImageButton)
         .Visible = gridFormFields.Items.Count > 1 && e.Item.ItemIndex < gridFormFields.Items.Count - 1;
    }
  • В коде ниже элемент управления, возвращаемый FindControl, имеет значение null. Почему?

  • Как я могу получить доступ к элементам управления buttonMoveUpFormField и buttonMoveDownFormField?

  • Можно ли из кода получить доступ к элементам управления, которые объявлены в разделе ItemTemplate раздела TemplateColumn DataGrid?


person Community    schedule 24.08.2010    source источник


Ответы (2)


Поскольку вам нужно добавить код, чтобы включить «Item» и «AlternatingItem» и исключить все другие типы, прежде чем пытаться найти этот элемент управления.

если (e.Item.Type == ...

person epitka    schedule 24.08.2010

Вы, безусловно, можете получить доступ к элементам управления, которые находятся в разделе ItemTemplate. Я занимаюсь похожей проблемой. Одна вещь, которую я обнаружил, заключается в том, что в зависимости от того, что вызывает ваш «gridFormFields_ItemDataBound», у вас может еще не быть доступа к этим элементам управления.

Я знаю, что в моем случае у меня есть «ItemTemplate» и «EditItemTemplate», когда я нажимаю «Изменить», он запускает событие «RowEditing», прежде чем он фактически переключится в «Режим редактирования», поэтому элемент управления не будет там еще. Однако у меня есть доступ к элементам управления в «RowUpdating», который запускается, когда я нажимаю «Сохранить» в режиме редактирования.

Может быть, это помогает? Например, ваше «OnDataBound» может быть событием, которое пытается получить доступ к вашим элементам управления, но у вас может не быть доступа к ним при привязке к данным?

Просто мысль. Я отредактирую это, если доберусь до своего.

person Brett    schedule 24.08.2010
comment
Спасибо за подсказку. Я предлагаю вам попробовать ответ эпитки, так как это сработало для меня. - person ; 25.08.2010