我继承了一些代码,到处都是 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()
?