2012-11-07 3 views
3

У меня есть gridview, где я добавил флажки программно. я сделать следующим образом при создании флажков внутри цикла Еогеасп, так что они вызывают событие при проверке,разрешить только один флажок - asp.net C#

  cbGV = new CheckBox(); 
      cbGV.ID = "cbGV"; 
      cbGV.AutoPostBack = true; 
      cbGV.CheckedChanged += new EventHandler(this.cbGV_CheckedChanged); 

Так в основном, когда я хочу, чтобы событие, которое срабатывает, я ниже следующее,

protected void cbGV_CheckedChanged(object sender, EventArgs e) 
    { 
     //gets the current checked checkbox. 
     CheckBox activeCheckBox = sender as CheckBox; 

     foreach (GridViewRow gvr in GridView1.Rows) 
     { 
      //this code is for finding the checkboxes in the gridview. 

      CheckBox checkBox = ((CheckBox)gvr.FindControl("cbGV")); 

      //so basically, right here i'm confused on how i should compare the if/else logic, how i should compare and disable every other checkbox if the current checkbox is checked. Any ideas gues? 

     } 

спасибо за ваш ответ заранее.

+0

Какой у Вас вопрос? – Ahmad

+0

Ну, на первом месте, пожалуйста, скажите, почему бы не использовать радиокнопку вместо флажков? Тем не менее, если вы настаиваете, то вы можете добиться того же, используя jquery/javascript. –

+0

использовать радиокнопку –

ответ

3

Во-первых, вы должны только снять отметку с другого CheckBoxes (если это то, что вы хотите), когда этот CheckBox проверен, а не когда он был снят.

Во-вторых, вы можете использовать == оператор сравнивать эту опцию с другими:

CheckBox activeCheckBox = sender as CheckBox; 
if(activeCheckBox.Checked) 
{ 
    foreach (GridViewRow gvr in GridView1.Rows) 
    { 
     CheckBox checkBox = ((CheckBox)gvr.FindControl("cbGV")); 
     checkBox.Checked = checkBox == activeCheckBox; 
    } 
} 
+0

такая же проблема здесь, она работает только тогда, когда я просматриваю флажки вверх, а не вниз. это может быть связано с характером цикла foreach? – Mana

+0

Где вы создавали флажки динамически? Идеальное место в 'RowCreated', а не в цикле. Могу ли я спросить, почему вы не добавляете их декларативно в TemplateField вместо разметки aspx? –

+0

Кстати, не могли бы вы объяснить следующую строчку, которую вы написали, checkBox.Checked = checkBox == activeCheckBox; – Mana

0

Я не пробовал, но вот один из способов сделать это:

protected void cbGV_CheckedChanged(object sender, EventArgs e) 
    { 
     //gets the current checked checkbox. 
     CheckBox activeCheckBox = sender as CheckBox; 
     BOOL flag = false; 
     CheckBox selectedCheckBox; 
     foreach (GridViewRow gvr in GridView1.Rows) 
     { 
      //this code is for finding the checkboxes in the gridview. 

      CheckBox checkBox = ((CheckBox)gvr.FindControl("cbGV")); 

      if (checkBox.Checked==true && flag==false) 
       { 
        flag = true; 
        selectedCheckBox = checkBox; 
       } 
      else 
       { 
        if (checkBox != selectedCheckBox) 
          { 
          checkBox.Enabled = false; 
          checkBox.Checked = false; 
          } 
       } 
      //so basically, right here i'm confused on how i should compare the if/else logic, how i should compare and disable every other checkbox if the current checkbox is checked. Any ideas gues? 

     } 
+0

привет, это работает только тогда, когда я просматриваю флажки вверх, а не когда вниз. это может быть связано с характером цикла foreach. любая идея, как это решить? – Mana

0
CheckBox activeCheckBox = sender as CheckBox; 
// to uncheck all check box 
foreach (GridViewRow rw in GrdProc.Rows) 
{ 
    CheckBox chkBx = (CheckBox)rw.FindControl("ChkCust"); 
    if (chkBx != activeCheckBox) 
    { 
     chkBx.Checked = false; 
    } 
} 
Смежные вопросы