1

私は何を間違っていますか?CheckBoxList があり、各要素を 1 つずつ処理したいと考えています。「cbl.Items.Count」行で、要素が「new」で初期化されていないことを示すエラーが表示されます。どうもありがとうございます!

CheckBoxList cbl = (CheckBoxList)FindControl("CBL_categ");
for (int i = 0; i < cbl.Items.Count; i++)
{
    if (cbl.Items[i].Selected)
        catn = cbl.Items[i].Value;
}

編集:

<asp:Content ID="Content4" runat="server" 
    contentplaceholderid="ContentPlaceHolder3">
    <asp:Label ID="statusLabel" runat="server" Text=""> </asp:Label>

    <asp:GridView ID="GridView1"  AutoGenerateColumns="False" runat="server" 
    DataSourceID="SqlDataSource1" Visible="False" >
        ....

    </asp:GridView>


    <br />
    Categories:<asp:CheckBoxList ID="CBL_categ" runat="server" DataTextField="name" DataValueField="name">
    </asp:CheckBoxList>

</asp:Content>
4

2 に答える 2

2

これの一般的な原因は、探している CheckBoxList が他のコンテナー内にネストされている場合、FindControl は再帰的に検索せず、代わりに null を返すため、それを見つけられないことです。

ネストされている場合、最適なパフォーマンス ソリューションは次のようなものです。

FindControl("nestingcontrol").FindControl("CBL_categ")

または、各コントロールで FindControl を実行する再帰メソッドを記述しますが、パフォーマンスの低下が予想されます。

参照:

http://forums.asp.net/t/1107107.aspx

于 2012-06-18T15:09:22.537 に答える
0

null を返す可能性があるため、エラー チェックが必要です。

CheckBoxList cbl = (CheckBoxList)FindControl("CBL_categ");

if (cbl != null)
{
        for (int i = 0; i < cbl.Items.Count; i++)
        {
            if (cbl.Items[i].Selected)
            {
                catn = cbl.Items[i].Value;
             }
         }
 }
于 2012-06-18T14:58:59.840 に答える