2009-08-27 173 views
7

需要一些帮助来解决这个问题。asp.net gridview复选框选择

我有一个gridview和gridview内我有一个复选框,并单击复选框后,我正在做一个回发事件,并试图更新此特定行只在数据库上。

这是我的gridview复选框的代码。请参阅OnCheckedChanged。

<asp:TemplateField HeaderText="Sample"> 
    <ItemTemplate> 
    <asp:CheckBox runat="server" 
        ID="chkSample" 
        Checked='<%# Bind("Sample") %>' 
        OnCheckedChanged="UpdateSupplyLed" 
        AutoPostBack="True"> 
    </asp:CheckBox> 
    </ItemTemplate> 
</asp:TemplateField> 

代码:

protected void UpdateSupplyLed(object sender, EventArgs e) 
{ 
    foreach (GridViewRow di in SamplingGridView.Rows)  
    {   
     CheckBox chkBx = (CheckBox)di.FindControl("chkSample"); 
     if (chkBx != null && chkBx.Checked) 
     { 
      //update database logic here. 
     } 
    } 
} 

上面的代码工作正常,但它让我所有的检查,我刚才查了一个irresepective的复选框。我不想要所有的人。

我怎样才能得到刚刚检查过的唯一一行值。某些行可能已经被检查过,因为这些记录的状态为真,我不想更新这些记录。

我想我的问题是对的!

更新:答案是:

protected void UpdateSupplyLed(object sender, EventArgs e) 
{ 
    CheckBox chkSampleStatus = sender as CheckBox;   
    bool sample = chkSampleStatus.Checked;    
    GridViewRow row = chkSampleStatus.NamingContainer as GridViewRow;   
    TextBox txtId = row.FindControl("Id") as TextBox;    
    int id = Int32.Parse(txtId.Text); 
} 

回答

7

试试这个:

CheckBox chkBx = sender as CheckBox; 

不是遍历所有行。

我没有在GridView中以这种方式使用CheckBox。通常我会使用GridView的OnRowCommand事件,并使用RowIndex或CommandArgument值来更新数据库。

想一想OnRowcommand对于CheckBox的启动可能会很棘手,更好的解决方案可能会坚持使用复选框的CheckChanged事件并使用NamingContainer控件导航到GridViewRow服务器端。喜欢的东西:

GridViewRow row = chkBx.NamingContainer as GridViewRow; 

我假设去复选框=>小区=>行,如果你谷歌ASP.NET NamingContainer你会得到一些更多的细节。

+0

谢谢您的回答。但我需要来自同一行的其他值,所以如何获取特定gridview行的行ID。这样我可以得到记录的Id。 – Supremestar 2009-08-27 13:08:59

+0

然后,我建议不绑定复选框的OnCheckChanged,而是使用GridViews OnRowCommand,而GridVieweCommandEventArgs提供的行HollyStyles – 2009-08-27 13:18:36

+0

, 我没有GridView中的select命令字段,所以Gridview的行命令没有触发。我应该怎样做我的朋友? 请帮忙。 – Supremestar 2009-08-27 13:37:10

0

也试试这个,如果上面不完全

DataTable dtGetStTable = (DataTable)ViewState["dtNewStudents"]; 

//Looping throgh Grid and deleting row after finding the checked row 
for (int i = dtGetStTable.Rows.Count - 1; i > -1; i--) 
{ 
GridViewRow row = GridView1.Rows[i]; 
bool isChecked = ((CheckBox)row.FindControl("CheckBox1")).Checked; 

if (isChecked) 
{ 
    try 
    { 
     string RollNo = dtGetStTable.Rows[i]["RollNo"].ToString(); 
     string Class = dtGetStTable.Rows[i]["Class"].ToString(); 
     string Division = dtGetStTable.Rows[i]["Division"].ToString(); 
     //Deleting the Reocrd from DataBase 
     TotalRecordDeleted += objSRE.DeleteTheSelectedRecord(RollNo, Class, Division); 

     dtGetStTable.Rows[i].Delete(); 
     dtGetStTable.AcceptChanges(); 
    } 
    catch (Exception ex) 
    { 

     //throw; 
    } 
} 

工作}