0

なぜ私はこれを行うことができません

一部のデータを取得するデータリストがあります。label1 が 123 の場合、2 番目の label2 は非表示にする必要があります

    Label Label1 = (Label)DataList2.FindControl("LabelName1");
    Label Label2 = (Label)DataList2.FindControl("LabelName2");

    if (Label1.Text == "123")
    {
        Label2.Visible = false;
    }

if ( Label1.Text
== "123")
になると、オブジェクト参照がオブジェクトのインスタンスに設定されていません。

4

4 に答える 4

1

ページのライフサイクルのどこにいるかによって異なります。DataList は、ASP.NET テンプレートを使用して内部コントロール コレクションを構築します。これは、 を呼び出すまで発生しません。DataBindこれは通常、 の直前に自動的に発生しますPreRender。また、作成されるまで、コントロール コレクション内のコントロールを見つけることはできません。

ページのライフサイクルのどこでこれを行っていますか? 文脈は何ですか?これをさらに複雑にする可能性があるものは他にもあります (FindControl は再帰的ではないことが 1 つあります)。これは、すべての名前付けコンテナーを必ずしも検索するわけではありません。しかし、これがどのような状況で機能しないかについてもっと知りたいのですが、それは機能するからです。ただし、注意が必要です。

編集:

このような何かがうまくいくはずです:

<asp:DataList runat="server" ID="DataList1" OnPreRender="DataList1_PreRender">...</asp:DataList>

そして、コードビハインド:

protected void DataList1_PreRender(object sender, EventArgs e)
{
    // the sender in this case is the DataList1 control
    // i often prefer to rely on the sender argument
    Label label1 = (Label)((Control)sender).FindControl("Label1");
    label1.Text = "Yay, it looks like this works!";
}
于 2010-06-10T20:48:47.323 に答える
0

編集:また、あなたができないことと、より良い答えを得るためにどのようなエラーが発生するかについても言及してください...最初の名前として「ラベル」(ラベルはキーワード/クラスであるため)を使用したくない..名前はLabel1または何か...そして String.Compare() を使用して文字列を比較します...

于 2010-06-10T16:49:40.807 に答える
0

できないことを言い忘れていませんか?それは今で何が起こっているのですか?

また、コメントで述べたように、「LabelName」または「LabelName1」です-これらは「l」と「1」を混同する可能性があります(見つけにくい)

于 2010-06-10T16:50:40.393 に答える
0

「LabelName2」が存在することを確認します。タイプミスがあるかもしれません。

于 2010-06-10T20:12:02.073 に答える