0

内側に 2 つのラベルがあり、リストビューの外側に 1 つのラベル (lbl1) があるリストビューがあります。lbl1 text = リストビュー内のラベルにしたい。

親切に詳細に答えてください、私は初心者です。以下のコードを実行するたびに、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。

ここに私のコードがあります:

protected void Page_Load(object sender, EventArgs e)
{
    Label mylabel = (Label)ListView1.FindControl("prog_idLabel");
    lbl1.Text = mylabel.Text;
}
4

3 に答える 3

2

これは修正です:

foreach (ListViewItem item in ListView1.Items)
{
    Label mylabel = (Label)item.FindControl("prog_idLabel");
    lblID.Text = mylabel.Text;
}
于 2012-08-07T11:07:46.080 に答える
0

最初に、コントロールがすべてオブジェクトのインスタンスに設定されていることを確認する必要があります。そうではないようです。あなたは ASP.NET プロジェクトに取り組んでいますよね? もしそうなら、あなたのイベントハンドラは this one のようです。別のイベントを探していた可能性があります。

すべてのインスタンスが適切に設定されていることを確認するには、null 参照を返すコントロールをインスタンス化するときにブレーク ポイントを設定します。ブレークポイントに到達する前に例外が発生した場合は、何が起こっているのかを理解する必要があります。コードを段階的にゆっくりと実行します。

于 2012-08-06T11:01:00.030 に答える
0

まず、アプリケーションのクラッシュを阻止するために、防御的なプログラミングがうまくいかないことがあります。

protected void Page_Load(object sender, EventArgs e)
{
    Label mylabel = (Label)ListView1.FindControl("prog_idLabel");
    if(mylabel != null)
         lbl1.Text = mylabel.Text;
}

そうすれば、FindControl が null を返す場合、またはキャストが機能しない場合、null オブジェクトにアクセスすることはありません。

リストビュー内でラベルをインスタンス化する前に、page_load が呼び出されていると思います。そのため、すべてが初期化されていることを確認できる場所にコードを配置することを検討してください。

于 2012-08-06T10:25:22.017 に答える