2

たくさんのチェックボックスを動的に作成しています。

CheckBox chkRead = new CheckBox();
chkRead.ID = "chk1";
chkRead.AutoPostBack = true;
chkRead.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);

CheckBox chkPost = new CheckBox();
chkRead.ID = "chk2";
chkPost.AutoPostBack = true;
chkPost.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);


 protected void CheckBox_CheckedChanged(object sender, EventArgs e)
 {
     CheckBox chk = (CheckBox)sender;


 }

私がやりたいことは次のとおりです。chkPostチェックボックスをチェックするとき、 chkReadチェックボックスもチェックしたいです。

CheckBox_CheckedChangedイベントでは、クリックされたCheckBoxにしかアクセスできませんが、そのイベントの他のチェックボックスをチェックする方法がわかりません。

4

4 に答える 4

3

これはメモリからのものですが、次のようなことができます。

protected void CheckBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox chk = (CheckBox)sender;
    CheckBox chkPost = (CheckBox) chk.NamingContainer.FindControl("chk2");
    CheckBox chkRead = (CheckBox) chk.NamingContainer.FindControl("chk1");
    if(chk == chkPost && chk.Checked)
    {  
        chkRead.Checked = true;
    }
} 

これは、ポストバック後に、これらすべてをコードビハインドで実行することを前提としています。javascriptでそれをやりたいのなら、それは別の質問です。

chk1これは、とchk2が同じネーミングコンテナにあることも前提としています。そうでなければ、物事は複雑になります。

于 2012-11-14T17:38:27.050 に答える
2

チェックボックスを作成するのはコードであるため、それらの参照をリストまたはディクショナリに保存し、必要に応じてIDで取得できます。

于 2012-11-14T17:38:23.137 に答える
0

動的に実行する場合は、関心のあるチェックボックスに属性を追加できます。次に、Page.Controlsコレクションをループして、ループしているコントロールにその属性があることをテストしてから、チェックするか、またはチェックを外します。

いくつかの擬似コード:

foreach(var control in Page.Controls)
  if(typeof(Control) is CheckBox and ((CheckBox)control).Attributes["myAttr"] != null)
     //check or uncheck it

ネストされたコントロールに関するコメントを読むと(これは少し面倒かもしれませんが)、動的に追加されるIDをコレクションに入れる必要があるというIgorに同意する傾向があります。

于 2012-11-14T17:38:48.660 に答える
0

これらのチェックボックスを作成している場所にコードを貼り付けてもらえますか?それは「OnInit」ですか、それとも他の場所ですか?これらのチェックボックスをコンテナに入れていますか、これらのコントロールをグローバル変数として保存しますか、それともメソッドで作成しますか?

于 2012-11-14T18:43:00.807 に答える