2011-08-11 6 views
0

GridView_RowCommandイベントの状態を確認しています。条件に基づいて、SkinIDを設定するか、TextBoxのSkinIDを削除します。UserControlのCodeBehindファイルのTextBoxにSkinIDを設定する方法はありますか

これは私のコードです:

if (dt.Rows[0]["D1Variable"].ToString() == "0") 
     { 
      txtMRVD1.Text = dt.Rows[0]["D1"].ToString(); 
      txtMRVD1.ReadOnly = true; 
      txtMRVD1.SkinID = "txtreadonly";    
     } 
     else 
     { 
      txtMRVD1.Text = ""; 
      txtMRVD1.ReadOnly = false; 
     } 

しかし、それは次のようなエラーがスローされます。

"The 'SkinId' property can only be set in or before the Page_PreInit event for static controls. For dynamic controls, set the property before adding it to the Controls collection." 

この問題を解決するにはどうすればよいですか?

答えて

2

私は、エラーメッセージに基づいて、そのコードをPage_PreInitイベントに移動するだけでよいと言います。

ただし、MSDNでは「要求がポストバックの場合、コントロールの値はまだビューステートから復元されていません。この段階でコントロールプロパティを設定すると、その値は次回に上書きされる可能性がありますイベント "

これにアプローチする方法をもっと創造する必要があるかもしれません。おそらく、セッションでスキンIDを決定するために使用される情報を保存する必要があります。あなたがまだいない場合は、ASP.NET Page Life Cycleでおなじみにすることをお勧めします。

は、ここでの例だとかもしれないあなたのための仕事、または少なくともあなたは正しい方向に指摘し得る:

protected void Page_PreInit(object sender, EventArgs e) 
{ 

    if ((string)Session["D1Variable"] == "0") 
    { 
     txtMRVD1.SkinID = "txtreadonly"; 
    } 
} 

あなたはGridViewのRowCommandイベントであなたのロジックの残りを行い、その後することができます。

+0

ありがとう – thevan

関連する問題