обновление столбца в зависимости от значения флажка

#c# #checkbox

#c# #флажок

Вопрос:

я пытаюсь обновить столбец в моей базе данных на основе того, установлен флажок в gridview или нет. Также обновление происходит только после нажатия кнопки. Проблема, вероятно, в моем синтаксисе, поэтому, если кто-нибудь может меня поправить, это было бы очень ценно.

Смотрите здесь мой код:

 protected void ButtonAfTeHalen_Click(object sender, EventArgs e)
    {
       foreach (GridViewRow r in GridViewOrders.Rows)
       {
          if (((CheckBox)r.Cells[0].FindControl("CheckBoxATH")).Checked == true
                        amp;amp; (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. Но он показывает идентификатор заказа на этикетке. Только идентификатор самого низкого отмеченного порядка в gridview, но не все выбранные идентификаторы.

С уважением, Mati

Комментарии:

1. проверьте значение null для checkBoxATH, OrderID и указали ли вы допустимые значения в элементе управления поиском. А также сообщите нам, в какой строке вы получаете эту ошибку.

2. Кажется, вы не используете GridViewRow r переменную.

3. @jfs: верно, если я добавлю if (((CheckBox)r.Cells[0].FindControl("CheckBoxATH")).Checked == true) {} в свой код, проблема останется. По-прежнему объекту не присвоено значение…

4. @varadarajan: Значения из findcontrol() являются правильными идентификаторами, я дважды проверил. Ошибки отображаются в инструкции update.

5. На стороне примечания: если я изменю checkBoxATH. Проверено на checkBoxATH, поэтому без . Проверено, рядом с предложением WHERE указан неправильный синтаксис. Я не знаю, поможет ли это как-нибудь.

Ответ №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();
            }
        }
  

Ответ №2:

Для меня звучит как нулевая ссылка. Проверьте все ссылки, используемые вами в инструкции update, и убедитесь, что они не равны null.

//daniel

Ответ №3:

Я также столкнулся с той же проблемой. Я решил это таким образом, надеюсь, это также решит вашу проблему..

      if ((Boolean)((DataGridViewCheckBoxCell)r.Cells[0].FindControl("CheckBoxATH").FormattedValue)
 amp;amp; (Label)r.Cells[3].FindControl("LabelOrderID") != null)
  

Здесь я использовал formattedvalue, поскольку состояние флажка не изменилось, чем оно дает нулевое значение.

В datagridview ячейка флажка работает загадочным образом, если флажок установлен, то иногда это дает значение true, а иногда это дает значение checked…

Комментарии:

1. И здесь я не знаю, почему вы используете findcontrol, когда вы можете напрямую указать «CheckBoxATH» в ячейках [«CheckBoxATH»]…

2. Спасибо за усилия, но этот код не будет работать для меня, потому что я использую GridView, а не DataGridView, и он также не распознает . FormattedValue.