2

重複の可能性:
.NETのNullReferenceExceptionとは何ですか?

1つのページにたくさんのラベルがあり、ページの読み込み時に更新する必要があります。ラベルのIDが「Label1」-「Label8」であることはわかっていますが、次のスニペットを実行すると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。Label.Text行にあるので、Labelが見つからないと思います。

int i = 1;
foreach (string sel in selArr)
{
    string labelId = "Label" + i.ToString();
    MySqlCommand cmd = new MySqlCommand(sel, conn);
    MySqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    { 
       Label label = (Label)FindControl(labelId);
       label.Text = "( " + reader["c"] + " )";
    }
    reader.Close();
    i++;
}

私はまだC#に慣れていないので、他のことはあまり試していません。

4

4 に答える 4

3

FindControlメソッドは、ページの最上層のみを検索します。ページ全体を再帰的に検索することはありません。

于 2012-12-21T17:42:00.147 に答える
1

ラベルがどこにあるかを知っている場合は、C#に伝えてください。ジムは、私が信じる良い説明を文書化しています。それは正確にはあなたの答えではありませんが、あなたにアイデアを与えるかもしれません。

于 2012-12-21T17:49:12.317 に答える
1

あなたはあなたがしたのと同じようにあなたのフォームIDにアクセスすることができます。起こり得るある種の破損のb'cosである可能性があります。以下のものを試してください。

解決策1:

ラベルに以下の種類の行があるdesigner.csファイルがあるかどうかを確認します。ない場合は、手動で追加します。

protected global::System.Web.UI.WebControls.Label Label3; 

解決策2

  1. Designer.csファイルを削除します
  2. 親aspxファイルを右クリックし、[Webアプリケーションに変換]を選択します
  3. これにより、適切なすべてのエントリを含むdesigner.csファイルが再作成されます。

これがお役に立てば幸いです。

于 2012-12-21T18:03:21.343 に答える
0

ラベルコントロールが別のコントロール内にある場合は、次の方法を使用して、ページ内のすべてのコントロールを繰り返し、ターゲットを見つけることができます。

protected Control RecursiveFindControl(Control targetControl, string findControlId)
    {
        if (targetControl.HasControls())
        {
            foreach(Control childControl in targetControl.Controls)
            {
                if (childControl.ID == findControlId)
                {
                    return childControl;
                }

                RecursiveFindControl(childControl, findControlId);
            }
        }

        return null;
    }

使用するには、次のようになります。

Label label = (Label)RecursiveFindControl(Page, labelId);
于 2012-12-21T18:36:19.960 に答える