C# ASP GridView — проблемы Row_Updating при попытке получить значения из ячеек в Gridview с NullReferenceExceptionC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# ASP GridView — проблемы Row_Updating при попытке получить значения из ячеек в Gridview с NullReferenceException

Сообщение Anonymous »

Мой вопрос состоит из двух частей. Пожалуйста, потерпите... я только изучаю этот материал.
У меня есть GridView, который позволяет редактировать и обновлять таблицу базы данных. Проблема № 1 заключается в том, что я не могу получить значения из GridView в своем коде. Я продолжаю получать ошибку. Я попробовал это несколькими разными способами и оказался в тупике. Вот код ASP: И в моем коде позади...

Код: Выделить всё

    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: ссылка на объект не установлена ​​на экземпляр объекта. p>
Ошибка источника:
Строка 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 ... ells-in-th
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»