ASP.NET:在DataGrid的TemplateColumn中声明的访问控件

时间:2010-08-24 19:13:24

标签: asp.net datagrid code-behind datagridtemplatecolumn

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返回的控件为空。为什么呢?

  • 如何访问buttonMoveUpFormField和buttonMoveDownFormField控件?

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

2 个答案:

答案 0 :(得分:1)

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

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

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

只是一个想法。如果我对我的进一步了解,我会编辑这个。

答案 1 :(得分:1)

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

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