いくつかのコードを継承し、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>
この動作は予期されたものですか? withを使用しているセルが問題にならない場合、FindControl()
代わりにこれを使用して安全に/確実に単純化できますか?
Label lblSomething = (Label)e.Row.FindControl("lblSomething");
Label lblSomethingElse = (Label)e.Row.FindControl("lblSomethingElse");
そうでない場合、使用するだけで信頼できますCells[0].FindControl()
か?
セルの不一致は偶然にしか機能していないこと、およびすべてが壊れないようにこれらのセル インデックスをできるだけ早く修正する必要があることを心配する必要がありますか?
または、私は の力を過小評価していFindControl()
ますか?