计算GridView中的复选框

时间:2014-08-12 12:16:56

标签: c# asp.net checkbox

我在GridView中有几个复选框和一个按钮。

我需要计算所选的复选框,并使用选中的doTable DB MySQL的字段计数器选中此复选框进行更新。

我尝试了这个解决方案,但是对于选中的复选框,我在更新中输出了此输出,例如选中了3个复选框。

counter
1
2
3

如何处理此输出?

counter
3
3
3

任何帮助都将不胜感激。

protected void btnUpdate_Click(object sender, EventArgs e)
{
    int counter = 0;

    foreach (GridViewRow row in GridView1.Rows)
    {
        CheckBox chkRow = (row.Cells[0].FindControl("chkSelect") as CheckBox);

        if (chkRow.Checked)
        {
            counter = counter + 1;
            UpdateProduct(counter);

        }
    }


private void UpdateProduct(int counter)
{
    string sql = String.Format(@"Update doTable set 
                                 counter = {0}; ",
                                 counter.ToString());
    try
    {
        conn.Open();
        OdbcCommand cmd = new OdbcCommand(sql, conn);
        cmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
    finally
    {
        conn.Close();
    }      
}

2 个答案:

答案 0 :(得分:4)

所以你想用总计数更新行?然后首先计算总计数:

int totalCount = GridView1.Rows.Cast<GridViewRow>()
    .Count(r => ((CheckBox)r.FindControl("chkSelect")).Checked);
// maybe: if(totalCount > 0)
UpdateProduct(totalCount);

请注意,使用此方法您根本不需要foreach

您需要在文件顶部添加using System.Linq;

答案 1 :(得分:2)

您需要将您的电话推迟到UpdateProduct。你过早地调用它。试试这个:

foreach (GridViewRow row in GridView1.Rows) {
    CheckBox chkRow = (row.Cells[0].FindControl("chkSelect") as CheckBox);

    if (chkRow.Checked) {
        counter = counter + 1;
    }
}

// Call this now.
UpdateProduct(counter);