1

いくつかのコードを継承し、GridView が散らばっていますが、OnItemDataBoundメソッドに次のような参照があることに気付きました。

Label lblSomething = (Label)e.Row.Cells[3].FindControl("lblSomething");
Label lblSomethingElse = (Label)e.Row.Cells[3].FindControl("lblSomethingElse");

「問題」は、lblSomethinglblSomethingElseが実際には同じセルにないことですが、どちらも正しく機能しているように見えます。少し単純化:

<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()ますか?

4

2 に答える 2

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>
于 2013-02-01T22:51:49.253 に答える