0

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;
    }
  • 在后面的代码中,FindControl 返回的 Control 是 null。为什么?

  • 如何访问 buttonMoveUpFormField 和 buttonMoveDownFormField 控件?

  • 从后面的代码中,是否可以访问在 DataGrid 的 TemplateColumn 部分的 ItemTemplate 部分中声明的控件?

4

2 回答 2

0

您当然可以访问 ItemTemplate 部分中的控件。我正在处理一个类似的问题。我发现的一件事是,根据调用“gridFormFields_ItemDataBound”的内容,您可能还没有访问这些控件的权限。

我知道在我的实例中,我有一个“ItemTemplate”和一个“EditItemTemplate”,当我单击编辑时,它会在实际切换到“编辑模式”之前触发一个事件“RowEditing”,因此控件不会还在那里。我确实可以访问“RowUpdating”中的控件,当我在编辑模式下单击“保存”时会触发该控件。

也许这有帮助?例如,您的“OnDataBound”可能是试图访问您的控件的事件,但您可能无法在数据绑定时访问它们?

只是一个想法。如果我对我的进一步了解,我将对其进行编辑。

于 2010-08-24T19:26:25.310 回答
0

因为在尝试找到该控件之前,您需要添加代码以包含“Item”和“AlternatingItem”并排除所有其他类型。

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

于 2010-08-24T19:54:43.673 回答