У меня есть GridView, который позволяет редактировать и обновлять таблицу базы данных. Проблема № 1 заключается в том, что я не могу получить значения из GridView в своем коде. Я продолжаю получать ошибку. Я попробовал это несколькими разными способами и оказался в тупике.
Вот разметка ASP.NET:
Код: Выделить всё
Код: Выделить всё
protected void ItemView_OnRowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = ItemView.SelectedRow;
int itemNum = Convert.ToInt16(ItemView.DataKeys[e.RowIndex].Values[0]);
string poNum = ((System.Web.UI.WebControls.TextBox)row.FindControl("txt_poNum")).Text;
string amount = ((System.Web.UI.WebControls.TextBox)row.FindControl("txt_amount")).Text;
string quantity = ((System.Web.UI.WebControls.TextBox)row.FindControl("txt_quantity")).Text;
string ordered = ((System.Web.UI.WebControls.TextBox)row.FindControl("txt_ordered")).Text;
string received = ((System.Web.UI.WebControls.TextBox)row.FindControl("txt_received")).Text;
string techNotes = ((System.Web.UI.WebControls.TextBox)row.FindControl("txt_techNotes")).Text;
string updateQuery = "UPDATE OrderItems SET ";
bool firstField = true;
if (!string.IsNullOrEmpty(poNum))
{
updateQuery += "purchaseOrderNum = @OrderNum";
firstField = false;
}
if (!string.IsNullOrEmpty(amount))
{
if (!firstField) updateQuery += ", ";
updateQuery += "itemAmt = @Amount";
firstField = false;
}
if (!string.IsNullOrEmpty(quantity))
{
if (!firstField) updateQuery += ", ";
updateQuery += "quantity = @Quantity";
firstField = false;
}
if (!string.IsNullOrEmpty(ordered))
{
if (!firstField) updateQuery += ", ";
updateQuery += "dateOrdered = @Ordered";
firstField = false;
}
if (!string.IsNullOrEmpty(received))
{
if (!firstField) updateQuery += ", ";
updateQuery += "dateReceived = @Received";
firstField = false;
}
if (!string.IsNullOrEmpty(techNotes))
{
if (!firstField) updateQuery += ", ";
updateQuery += "techNotes = @TechNotes";
}
updateQuery += "WHERE orderItemId = @ID";
using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ForCustomWebApps"]))
{
using (SqlCommand cmd = new SqlCommand(updateQuery, conn))
{
cmd.Parameters.AddWithValue("@ID", id);
if (!string.IsNullOrEmpty(poNum))
cmd.Parameters.AddWithValue("@OrderNum", poNum);
if (!string.IsNullOrEmpty(amount))
cmd.Parameters.AddWithValue("@Amount", amount);
if (!string.IsNullOrEmpty(quantity))
cmd.Parameters.AddWithValue("@Quantity", quantity);
if (!string.IsNullOrEmpty(ordered))
cmd.Parameters.AddWithValue("@Ordered", ordered);
if (!string.IsNullOrEmpty(received))
cmd.Parameters.AddWithValue("@Received", received);
if (!string.IsNullOrEmpty(techNotes))
cmd.Parameters.AddWithValue("@TechNotes", techNotes);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
ItemView.EditIndex = -1;
BindGrid();
}
Код: Выделить всё
itemNum
Код: Выделить всё
GridViewRow row = ItemView.SelectedRow;
int itemNum = Convert.ToInt16(ItemView.DataKeys[e.RowIndex].Values[0]);
Ссылка на объект не установлена на экземпляр объекта.
Описание: произошло необработанное исключение. во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее источнике в коде.
Сведения об исключении: System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
Ошибка источника:
Строка 116: int itemNum = Convert.ToInt16(ItemView.DataKeys[e.RowIndex].Values[0]);
Строка 117:
Строка 118: строка poNum = ((System.Web. UI.WebControls.TextBox)row.FindControl("txt_poNum")).Text;
Итак, это первое проблема.
Вторая проблема заключается в том, что кто-то может редактировать несколько заливок в строке GridView, но ему НЕ ОБЯЗАТЕЛЬНО редактировать их все. Они могут ввести PONumber и сумму, но не технические примечания или дату получения. Мне нужен элегантный способ проверки пустых полей для создания оператора обновления. Вы можете увидеть то, что я сделал, по образцу того, что я нашел в Интернете. Есть ли лучший способ сделать это в цикле?
Заранее благодарю вас за любую помощь, которую вы можете мне оказать. Я рву на себе волосы!
Подробнее здесь: https://stackoverflow.com/questions/792 ... om-cells-i