Ram349 Ответов: 1

Нет позиции строки во время обновления GridView в строке


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

DataTable dt = (DataTable)Session["table"];


               GridViewRow row = Admin_Grid.Rows[e.RowIndex];
               dt.Rows[row.DataItemIndex]["APCUserID"] = ((Label)(row.Cells[1].Controls[0]));
              dt.Rows[row.DataItemIndex]["FirstName"] = ((TextBox)(row.Cells[2].Controls[0]));
               dt.Rows[row.DataItemIndex]["LastName"] = ((TextBox)(row.Cells[3].Controls[0]));
               dt.Rows[row.DataItemIndex]["Organization"] = ((TextBox)(row.Cells[4].Controls[0]));
               dt.Rows[row.DataItemIndex]["PhoneNumber"] = ((TextBox)(row.Cells[5].Controls[0]));
               dt.Rows[row.DataItemIndex]["EmailAddress"] = ((TextBox)(row.Cells[6].Controls[0]));
               //dt.Rows[row.DataItemIndex]["AIPServed"] = ((TextBox)(row.Cells[0].Controls[1]));
               dt.Rows[row.DataItemIndex]["DropDownUserStatus"] = ((DropDownList)(row.Cells[7].Controls[0]));
               // dt.Rows[row.DataItemIndex]["UserID"] = ((TextBox)(row.Cells[0].Controls[1]));
               // dt.Rows[row.DataItemIndex]["Password"] = (TextBox)Admin_Grid.Rows[e.RowIndex].FindControl("TextBoxEmailAddress");
             //  dt.Rows[row.DataItemIndex]["DropDownUserStatus"] = (DropDownList)Admin_Grid.Rows[e.RowIndex].FindControl("DropDownUserStatus");
               //Reset the edit index.
               Admin_Grid.EditIndex = -1;
              // ((TextBox)(row.Cells[1].Controls[0])).Text;
               //Bind data to the GridView control.
               LoadAdminData();


я получаю ошибку выделенную жирным шрифтом

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

Что я уже пробовал:

Я перепробовал все возможные способы, я получаю значение строки, но оно сводится к следующей строке, которая выдает ошибку - нет позиции строки.

The Praveen Singh

сначала проверьте, что в вашей таблице данных должно быть все имя столбца, которое вы использовали в RowIndex. Например-
ДТ.Строк[подряд.DataItemIndex]["APCUserID"] = ((этикетка)(ряд.Клетки[1].Controls[0])); в dt должен быть "APCUserID", это единственная причина, когда возникает ошибка, как вы упомянули.

Richard Deeming

Если вы получаете ошибку, то вам нужно сказать нам, что это за ошибка. У нас нет доступа к вашему компьютеру, поэтому мы не можем запустить ваш код, чтобы узнать.

Нажмите кнопку "улучшить вопрос" и обновите свой вопрос с полной информацией об ошибке, которую вы получаете.

Ram349

Привет Правин,
Спасибо, что ответили на мой пост.могу ли я объявить все имена столбцов предопределенными. можете ли вы, пожалуйста, сообщить мне, как следует объявить .

1 Ответов

Рейтинг:
1

Vincent Maverick Durano

Несколько заметок для вас:

(1) Всегда проверяйте наличие нулей при ссылке на объект сеанса.

if(Session["table"] != null){
     //your code here
}

(2) Всегда проверяйте количество строк перед доступом к коллекции строк сетки.
if(Admin_Grid.Rows.Count > 0){
    //your code here
}

(3 )Если вы хотите получить текстовую часть метки, то вам следует использовать ее.Текст после приведения объекта к метке.
string someVariableName = ((Label)(row.Cells[1].Controls[0])).Text;

(4)Убедитесь, что ваша таблица данных содержит имя поля, к которому вы пытаетесь получить доступ. В вашем случае убедитесь, что APCUserID имя поля существовать в вашем DataTable в противном случае он будет выдавать ошибку. Если вы не уверены в именах полей, то вы также можете ссылаться на них с помощью indeces. Например:
dt.Rows[row.DataItemIndex][0] = ((Label)(row.Cells[1].Controls[0])).Text;


Недостатком использования индекса при ссылке на столбец является то, что если последовательность столбцов изменится, то ваши данные/логика будут перепутаны.