ASP.NET: элементы управления доступом, объявленные в TemplateColumn of DataGrid - PullRequest
0 голосов
/ 24 августа 2010

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>

Код позади:

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;
    }
  • В указанном коде возвращается элемент управления by FindControl имеет значение null .Почему?

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

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

Ответы [ 2 ]

1 голос
/ 24 августа 2010

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

if (e.Item.Type == ...

1 голос
/ 24 августа 2010

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

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

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

Просто мысль.Я отредактирую это, если получу дальнейшую информацию о себе.

...