#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.