2011-09-07 36 views
1

我在此字段中有一個帶有TemplateField和複選框的數據網格。我將這些複選框標記爲選中或不選,具體取決於數據庫中的1還是0。確定在數據網格上檢查哪個複選框並更新數據庫

<asp:TemplateField HeaderText="Normal User Logging"> 
     <ItemTemplate> 
      <asp:CheckBox runat="server" ID="normalLogging" Checked='<%# Eval("normal_toggle") == 1 %>' 
      AutoPostBack="true" /> 
     </ItemTemplate> 
     </asp:TemplateField> 

我將在此數據網格中有多行。我想知道如何確定選中哪個複選框。比如,我怎麼知道一個人點擊第三行復選框?

回答

1

根據你所說的,它不是複選框,它將執行PostBack,而是一些其他按鈕,因此你可以一次檢查你的整個選擇。在這種情況下,複選框不應該是AutoPostBack="true"

這就是說,你的按鈕的代碼將是這樣的:

foreach (GridViewRow row in gv.Rows) 
{ 
    CheckBox cb = row.FindControl("cb") as CheckBox; 
    if (cb != null) 
    { 
     if(cb.Checked) 
     { 
      //Do your thing here 
     } 
    } 
} 

更新

OP(賈斯汀)公佈,他希望更新數據庫的每個複選框點擊。在這種情況下,解決辦法是處理CheckBox的OnCheckedChanged事件:

.aspx的代碼:

<asp:TemplateField HeaderText="Normal User Logging"> 
    <ItemTemplate> 
     <asp:CheckBox runat="server" ID="normalLogging" 
         Checked='<%# Eval("normal_toggle") == 1 %>' 
         AutoPostBack="true" 
         OnCheckedChanged="cb_CheckedChanged" 
         yourID='<%#Eval("yourIdField") %>'/> 
    </ItemTemplate> 
</asp:TemplateField> 

C#代碼背後:

protected void cb_CheckedChanged(object sender, EventArgs e) 
{ 
    Checkbox cb = sender as CheckBox; 
    string yourID = cb.Attributes["yourID"]; 
    //Do your thing 
} 
+0

不,我每次複選框被選中時發回。我希望它能更新數據庫並將其反映給用戶。 – Justin

+0

好的,看起來不錯。然而,我的問題仍然是如何確定哪個盒子被檢查。所以在後面的代碼中,我怎麼知道它是第四行的複選框而不是第二行?我只看到複選框對象正在發送,但我沒有看到確定它在哪一行的方法。 – Justin

+0

哦,是的,你說得對。我更新了我的答案以包含該內容。希望能幫助到你! –

1

創建具有DataGridViewCheckBoxColumn控制類型的列,並且使用Click事件和CellContentClick,請參閱下面的示例

private void Form1_Load(object sender, EventArgs e) 
    { 
     DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn(); 
     col.Name = "ColumnName"; 
     col.HeaderText = "HeaderTest"; 
     col.TrueValue = "True"; 
     col.FalseValue = "False"; 
     this.dataGridView1.Columns.Add(col); 
     this.dataGridView1.CellContentClick += new DataGridViewCellEventHandler(dataGridView1_CellContentClick); 
     this.dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick); 
    } 

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (this.dataGridView1.Columns[e.ColumnIndex].Name == "ColumnName") 
     { 
      DataGridViewCheckBoxCell cell = this.dataGridView1.CurrentCell as DataGridViewCheckBoxCell; 
      if (cell.Value == cell.TrueValue) 
       //your code here    
     } 
    } 

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex >= 0 && this.dataGridView1.Columns[e.ColumnIndex].Name == "ColumnName") 
     { 
      DataGridViewCheckBoxCell cell = this.dataGridView1.CurrentCell as DataGridViewCheckBoxCell; 
      if (cell.Value == cell.TrueValue) 
      { 
       //your code here 
      } 
     } 
    } 

Regards

相關問題