我正在尝试更新数据库中的列,而不是在gridview中选中复选框。此外,更新仅在button_click之后发生。问题可能是我的语法,所以如果有人能纠正我,那将非常感激。
在这里看到我的代码:
protected void ButtonAfTeHalen_Click(object sender, EventArgs e)
{
foreach (GridViewRow r in GridViewOrders.Rows)
{
if (((CheckBox)r.Cells[0].FindControl("CheckBoxATH")).Checked == true
&& (Label)r.Cells[3].FindControl("LabelOrderID") != null)
{
string conn2 = "Data Source=pc-...";
CheckBox checkBoxATH = (CheckBox)GridViewOrders.FindControl("CheckBoxATH");
Label orderID = (Label)r.Cells[3].FindControl("LabelOrderID");
LabelTestID.Visible = true;
LabelTestID.Text = orderID.Text.ToString();
System.Data.SqlClient.SqlConnection sqlConn10 = new System.Data.SqlClient.SqlConnection(conn2);
sqlConn10.Open();
System.Data.SqlClient.SqlCommand updateCommand =
new System.Data.SqlClient.SqlCommand("UPDATE tblOrders SET Status= " + checkBoxATH.Checked + " WHERE tOrderId=@orderID", sqlConn10);
updateCommand.Parameters.AddWithValue("@orderID", LabelTestID.Text);
updateCommand.ExecuteNonQuery();
}
}
}
错误说明:对象引用未设置为对象的实例。
错误@ update语句。但它确实显示了标签上订单的ID。只有gridview中最低检查顺序的ID,而不是所有选定的ID。
关心马蒂
答案 0 :(得分:1)
for (int i = 0; i < GridViewOrder.Rows.Count; i++)
{
CheckBox ck = (CheckBox)GridViewOrder.Rows[i].Cells[0].FindControl("CheckBoxATH");
Label orderID = (Label)GridViewOrder.Rows[i].Cells[5].FindControl("LabelOrderID");
if (ck != null)
{
string conn = "Data Source=pc-...";
System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection(conn);
sqlConn.Open();
System.Data.SqlClient.SqlCommand updateCommand = new System.Data.SqlClient.SqlCommand("UPDATE tblOrders SET tOrderATH = '" + ck.Checked + "' WHERE tOrderId= '" + orderID.Text + "'", sqlConn);
updateCommand.Parameters.AddWithValue("@orderID", orderID.Text);
updateCommand.ExecuteNonQuery();
}
}
答案 1 :(得分:0)
听起来像对我的空引用。检查更新语句中使用的所有引用,并确保它们不为空。
//丹尼尔
答案 2 :(得分:0)
我也遇到了同样的问题。我这样解决了,希望它也能解决你的问题..
if ((Boolean)((DataGridViewCheckBoxCell)r.Cells[0].FindControl("CheckBoxATH").FormattedValue)
&& (Label)r.Cells[3].FindControl("LabelOrderID") != null)
这里我使用了formattedvalue,因为复选框的状态没有改变,因为它给出了一个空值。
在datagridview复选框中,单元格以神秘的方式工作,如果选中复选框,有时它会给出值true或者有时它会检查值...