我在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();
}
}
答案 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);