2014-01-21 5 views
1

У меня есть небольшой GridView, который будет содержать определенные элементы. Это код, который генерирует GridView после пользователь нажимает на элемент:Удалить определенную строку в динамически сгенерированном gridview

if (grdCarritoAddons.Rows.Count == 0) 
     { 

      dt.Columns.Add(new DataColumn("Name", typeof(System.String))); 
      dt.Columns.Add(new DataColumn("Price", typeof(System.String))); 
     } 
     else 
     { 
      dt = HttpContext.Current.Session["DataTable"] as DataTable; 
     } 
     Session["DataTable"] = dt; 

     DataRow dr1 = dt.NewRow(); 
     dr1[0] = AddonName.ToString(); 
     dr1[1] = Convert.ToDecimal(PriceAddon); 
     dt.Rows.Add(dr1); 
     grdCarritoAddons.DataSource = dt; 
     grdCarritoAddons.DataBind(); 

    } 

Теперь мне нужен, чтобы пользователь мог выбрать элемент и удалить конкретный один. На странице ASPX я уже добавил команду «Удалить» и создал пустой метод RowDeleting в коде и свойствах GridView. Он не работает, и я придумал решение, которое несколько работает, но не то, что мне нужно сделать. Это в основном вытирает весь DataTable.

  //grdCarritoAddons.DataSource = dt; 
     //grdCarritoAddons.DataBind(); 
     //Session["DataTable"] = dt; 
     //Session.Remove("Total"); 

Я попытался это:

grdCarritoAddons.Rows.RemoveAt(grdCarritoAddons.SelectedRows[0].Index); 

Но не идти. Не работает в ASP. Спасибо за любую помощь :)

Текущий код:

  dt = HttpContext.Current.Session["DataTable"] as DataTable; 
      dt.Rows.RemoveAt(grdCarritoAddons.SelectedRow.RowIndex); 

Но его метания ссылка на объект не указывает на экземпляр объекта исключения. Если я поставлю IF, чтобы проверить, является ли строка нулевой, она вообще не будет выполняться ... но данные, очевидно, не пусты.

+0

_ «Не работает в ASP» _ Что это значит, вы получаете исключение или нежелательный результат? Что происходит именно так? –

+0

Это ошибка: «System.Web.UI.WebControls.GridViewRowCollection» не содержит определения для «RemoveAt» и никакого метода расширения «RemoveAt», принимающего первый аргумент типа «System.Web.UI.WebControls.GridViewRowCollection» (вам не хватает директивы using или ссылки на сборку?) –

+0

Да, этот метод не существует, поскольку вы можете видеть [здесь] (http://msdn.microsoft.com/en-us/library/System. Web.UI.WebControls.GridViewRowCollection_methods (v = vs.110) .aspx). Вместо этого вы должны изменить источник данных и затем привязать таблицу к сетке. 'DataRowCollection' имеет метод' 'RemoveAt' '(http://msdn.microsoft.com/en-us/library/system.data.datarowcollection.removeat (v = vs.110) .aspx). –

ответ

1

This is the Error: 'System.Web.UI.WebControls.GridViewRowCollection' does not contain a definition for 'RemoveAt' and no extension method 'RemoveAt' accepting a first argument of type 'System.Web.UI.WebControls.GridViewRowCollection' could be found

Да, этот метод не существует, как вы можете видеть here. Вместо этого вы должны изменить источник данных и затем привязать таблицу к сетке. DataRowCollection имеет RemoveAt method.

dt.Rows.RemoveAt(grdCarritoAddons.SelectedRow.RowIndex); 
grdCarritoAddons.DataSource = dt; 
grdCarritoAddons.DataBind(); 
+0

Эй, Тим. Я работал с чем-то похожим, но я пошел вперед и использовал код, который вы опубликовали. Это бросает мне ошибку в среде IDE, говорит, что Gridview не содержит определения для SelectedRows. –

+0

@LordRelix: ASP.NET GridView не поддерживает несколько выбранных строк. Это свойство ['SelectedRow'] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.selectedrow (v = vs.110) .aspx) и' GridViewRow 'вместо этого имеет свойство' RowIndex'. Отредактировал мой ответ. –

+0

Кажется, что регистр столбца равен нулю. Он выбрасывает «Ссылка на объект, не установленную на экземпляр объекта». ошибка. Если я буду вводить 'if ((row! = Null))', он не будет выполняться и не будет ошибки. Weird. Я попытался загрузить DT заранее в коде на всякий случай. Я буду обновлять код в OP. –

Смежные вопросы