我继承了一些充满GridView的代码,我注意到OnItemDataBound
方法中的以下类型的引用:
Label lblSomething = (Label)e.Row.Cells[3].FindControl("lblSomething");
Label lblSomethingElse = (Label)e.Row.Cells[3].FindControl("lblSomethingElse");
“问题”是lblSomething
和lblSomethingElse
实际上不在同一个单元格中,但无论如何它们似乎都正常工作。简化一下:
<Columns>
<asp:TemplateField runat="server" HeaderText="Online materials available to assign">
<ItemTemplate>
<asp:Label ID="lblThis" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Assign" HeaderStyle-Width="75px">
<ItemTemplate>
<asp:Label ID="lblThat" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Assign" HeaderStyle-Width="75px">
<ItemTemplate>
<asp:Label ID="lblSomething" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Assign" HeaderStyle-Width="75px">
<ItemTemplate>
<asp:Label ID="lblSomethingElse" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
预计会出现这种情况吗?如果我使用FindControl()
的哪个单元格无关紧要,我可以安全/可靠地简化它吗?
Label lblSomething = (Label)e.Row.FindControl("lblSomething");
Label lblSomethingElse = (Label)e.Row.FindControl("lblSomethingElse");
如果没有,仅使用Cells[0].FindControl()
是否可靠?
我是否应该担心细胞不匹配只能通过一次快乐的事故来解决,我需要尽快修复这些细胞指数,以免一切破裂?
或者,我是否低估了FindControl()
的力量?
答案 0 :(得分:2)
经过一些实验,我发现以下工作完全正常。
Label lblSomething = (Label)e.Row.FindControl("lblSomething");
Label lblSomethingElse = (Label)e.Row.FindControl("lblSomethingElse");
这是否是“最佳实践”超出了我的范围。
此外,我已从标记中的第一个runat="server"
中删除TemplateField
以匹配其他标记。显然,这是不必要的。 (谁知道?)
<Columns>
<asp:TemplateField HeaderText="Online materials available to assign">
<ItemTemplate>
<asp:Label ID="lblThis" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Assign" HeaderStyle-Width="75px">
<ItemTemplate>
<asp:Label ID="lblThat" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Assign" HeaderStyle-Width="75px">
<ItemTemplate>
<asp:Label ID="lblSomething" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Assign" HeaderStyle-Width="75px">
<ItemTemplate>
<asp:Label ID="lblSomethingElse" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
答案 1 :(得分:0)
Label myLabel = e.row.FindControl("myControl") as Label;
if(myLabel !=null)
{
// Do some work
}
我更喜欢使用铸造。