根据复选框值更新列

时间:2011-04-14 08:17:11

标签: c# checkbox

我正在尝试更新数据库中的列,而不是在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。

关心马蒂

3 个答案:

答案 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或者有时它会检查值...