在 GridView 中正确使用 FindControl()
本文关键字:FindControl GridView | 更新日期: 2023-09-27 17:57:25
我继承了一些代码,其中充斥着 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()
的力量?
经过一些实验,我发现以下内容工作得很好。
Label lblSomething = (Label)e.Row.FindControl("lblSomething");
Label lblSomethingElse = (Label)e.Row.FindControl("lblSomethingElse");
这是否是"最佳实践"超出了我的范围。
此外,我还从标记的第一个TemplateField
中删除了runat="server"
以匹配其他。显然,这是不必要的。(谁知道呢?
<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>
Label myLabel = e.row.FindControl("myControl") as Label;
if(myLabel !=null)
{
// Do some work
}
我更喜欢用于铸造。