Я поддерживаю веб-сайт ASP.Net 2.0, на котором продукты отображаются в GridView. Клиент спросил, могу ли я отображать кнопку «Добавить в корзину» в каждой 10-й строке. Я мог бы сделать это, поместив кнопку в отдельный столбец и изменив видимость, но мне было интересно, могу ли я вводить новую строку после каждых 10 элементов. Это помещает кнопку в отдельную строку и не занимает место в столбце, когда она не видна. Любые мысли о том, как это сделать? ТИА
Можно ли вставить строку в GridView?
Ответы (2)
Общеизвестно, что вставлять строки в GridView очень сложно. Вы не думали об использовании повторителя?
Учитывая следующую разметку:
<asp:Repeater id="repeater" runat="server">
<ItemTemplate>
<h1><%#Container.DataItem%></h1>
</ItemTemplate>
</asp:Repeater>
Вы можете использовать следующий код программной части для вставки пользовательского элемента управления после выбранных вами строк:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.Generic;
public partial class Default : Page
{
protected override void OnInit(EventArgs e)
{
this.repeater.ItemCreated += repeater_ItemCreated;
base.OnInit(e);
}
protected override void OnLoad(EventArgs e)
{
this.repeater.DataSource = new List<String>
{
"one", "two", "three", "four", "five", "six", "seven"
};
this.repeater.DataBind();
base.OnLoad(e);
}
void repeater_ItemCreated(Object sender, RepeaterItemEventArgs e)
{
if (this.repeater.Items.Count > 0
&& this.repeater.Items.Count % 3 == 0)
{
this.repeater.Controls.Add(new LiteralControl("<h4>hello world</h4>"));
}
}
}
Я не думаю, что это можно сделать напрямую с помощью GridView (без взлома источника). Но вы могли бы использовать некоторый javascript для вставки html для кнопки в DOM страницы после рендеринга GridView.
Вы должны перебирать все строки в таблице, созданной с помощью gridview, а затем после каждой 10-й строки создавать новую строку (со всеми ячейками или одной ячейкой colspan). Внутри этой ячейки вставьте кнопку с onClick, вызывающую вашу процедуру javascript, чтобы добавить элемент в корзину.