我想更新已检查过的行,然后重新加载gridview。
我使用一个按钮和一个用于选择行的复选框来更新它。
protected void btnProceed_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
CheckBox chkRow = (row.Cells[0].FindControl("chkRow") as CheckBox);
if (chkRow.Checked)
{
con.Open();
cmd = new SqlCommand(@"UPDATE JobQuotations1
SET TransactionStatus = @Done
WHERE TransactionID = @Tid
AND TransactionNum = @num", con);
cmd.Parameters.AddWithValue("@Done", "Done");
cmd.Parameters.AddWithValue("@Tid", GridView1.SelectedRow.Cells[1].ToString());
cmd.Parameters.AddWithValue("@num", GridView1.SelectedRow.Cells[2].ToString());
cmd.ExecuteNonQuery();
con.Close();
LoadDataGrid();
}
}
}
当我点击按钮时,没有发生任何事情。
答案 0 :(得分:2)
替换此
.table-striped
用这个
GridView1.SelectedRow.Cells[1].ToString()
GridView1.SelectedRow.Cells[2].ToString()
您想要行{1}的行单元格,而GridView1.SelectedRow.Cells[1].Text
GridView1.SelectedRow.Cells[2].Text
将返回单元格类型的类型信息。
此外,正确的方法应该是在循环中获取当前行的单元格值,因为您已经拥有当前Text
ToString
答案 1 :(得分:0)
cmd.Parameters.AddWithValue("@Tid", row.Cells[1].Text);
cmd.Parameters.AddWithValue("@num", row.Cells[2].Text);
修改添加参数的代码。同时检查通过调试发送到数据库服务器的查询。尝试直接在数据库服务器上运行相同的查询,看看是否有任何行受到影响。
答案 2 :(得分:0)
使用
foreach (DataGridViewRow item in GridView.Rows)
{
if (Convert.ToBoolean(item.Cells["ColumnCheckBoxName"].Value) == true)
{
long DocId = (long)item.Cells[0].Value;
}
}