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部分中声明的控件?
答案 0 :(得分:1)
您当然可以访问ItemTemplate部分中的控件。我正在处理类似的问题。我发现的一件事是,根据调用“gridFormFields_ItemDataBound”的内容,您可能无法访问这些控件。
我知道在我的实例中,我有一个“ItemTemplate”和一个“EditItemTemplate”,当我点击编辑时,它会在实际切换到“编辑模式”之前触发事件“RowEditing”,因此控件不会在那里。我确实可以访问“RowUpdating”中的控件,当我在编辑模式下单击“保存”时会触发该控件。
也许这会有帮助吗?例如,您的“OnDataBound”可能是尝试访问您的控件的事件,但您可能无法在数据绑定上访问它们?
只是一个想法。如果我对我的进一步了解,我会编辑这个。
答案 1 :(得分:1)
因为在尝试查找该控件之前,需要添加代码以包含“Item”和“AlternatingItem”并排除所有其他类型。
if(e.Item.Type == ...