deepisingh Ответов: 2

как получить индекс строки второй страницы в gridview?


здесь у меня есть gridview с общим количеством записей 6 ...я сохранил размер страницы как 3.... означает, что для каждой страницы я получу 3 записи....теперь я должен удалить запись на второй странице в gridview..для tht я должен захватить индекс строки в событии команды строки...см. Мой ниже иам код становится показателем ошибки, если я пытаюсь удалить запись в первые страницы в GridView в ..Пожалуйста, помогите мне...
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {        
            if (e.CommandName == "ImgAppDelete")
            {               
                int index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = GridView1.Rows[index];
                DataTable dt = new DataTable();
                dt = (DataTable)ViewState["dt"];                              
                dt.Rows.RemoveAt(row.RowIndex + GridView1.PageSize);
                dt.AcceptChanges();
                GridView1.DataSource = dt;
                GridView1.DataBind();              
            }
}

Rohit Shrivastava

в какой строке вы получаете исключение индекса из диапазона?
если это GridViewRow row = GridView1.Rows[index]; то проверьте значение индекса?

Sandeep Mewara

Зачем удалять с помощью rowIndex? Почему бы не какой-нибудь уникальный идентификатор?

2 Ответов

Рейтинг:
2

njammy

Причина, по которой вы получаете индекс из связанной ошибки, связана с изменениями в индексах при удалении строки с помощью значения index commandArgument. Это один из способов сделать это, но это слишком много работы, так как вам также нужно управлять индексами по строкам данных. В .Net это уже встроено и делается следующим образом.

Решение состоит в том, чтобы привязать значение поля ключа строки данных к объекту команды строки, т. е.

CommandArgument='<%#Eval("IdColumnName")%>'


Поместите это на кнопку delete/remove/control.

Когда он нажат, вы можете проанализировать значение из e.commandArgument

Затем, в rowCommand - удалить часть, удалить строку, как это:

сначала найдите строку данных:

DataRow[] drArray = dt.Select("KeyFieldName = " + e.commandargument.toString());
if(drArray.Length == 1) //To avoid object instance not reference error
{
  DataRow dr = drArray[0];
  dr.Delete();
  dt.AcceptChanges();
  GridView1.DataSource = dt;
  GridView1.DataBind(); 
}


Рейтинг:
0

manognya kota

Привет,


Вы можете использовать уникальный идентификатор вашей записи для вставки/обновления/удаления строк в gridview.Этот уникальный идентификатор называется "datakey".


Проверьте приведенную ниже ссылку, чтобы получить образец

How_to_edit_and_Delete_records_in_a_gridview_using_datakeys[^]


Надеюсь, это поможет.


njammy

Я надеюсь, что все читатели оценят это дополнительное сообщение как форму рассмотрения ОП, основанную на опыте обоих решений.

Решение Manognya kota также будет работать, но помните, что требуется немного больше работы, чтобы получить значение ключа данных с помощью индекса GridViewRow и row. Кроме того, этот подход будет работать с большинством событий строки GridView, но иногда получить идентификатор сложнее.

Использование подхода e.commandargument с объектом datasource менее сложно, но решите, является ли это лучшим подходом, т. е. если вы хотите использовать другие элементы управления для вызова команды event или просто для обработки событий строки gridview.

manognya kota

Спасибо, Оненоми.