Можно ли вставить строку в GridView?

Я поддерживаю веб-сайт ASP.Net 2.0, на котором продукты отображаются в GridView. Клиент спросил, могу ли я отображать кнопку «Добавить в корзину» в каждой 10-й строке. Я мог бы сделать это, поместив кнопку в отдельный столбец и изменив видимость, но мне было интересно, могу ли я вводить новую строку после каждых 10 элементов. Это помещает кнопку в отдельную строку и не занимает место в столбце, когда она не видна. Любые мысли о том, как это сделать? ТИА


person Sisiutl    schedule 19.03.2009    source источник
comment
вы действительно имеете в виду 1.1? в этом случае вы, вероятно, имеете в виду datagrid или что-то еще, пожалуйста, проверьте это и обновите вопрос   -  person eglasius    schedule 19.03.2009
comment
Почему ОП действительно означает 1.1?   -  person Andrew Hare    schedule 19.03.2009
comment
Потому что изначально я сказал 1.1, но изменил его на 2.0 после комментария Фредди.   -  person Sisiutl    schedule 20.03.2009


Ответы (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>"));
        }
    }
}
person Andrew Hare    schedule 19.03.2009

Я не думаю, что это можно сделать напрямую с помощью GridView (без взлома источника). Но вы могли бы использовать некоторый javascript для вставки html для кнопки в DOM страницы после рендеринга GridView.

Вы должны перебирать все строки в таблице, созданной с помощью gridview, а затем после каждой 10-й строки создавать новую строку (со всеми ячейками или одной ячейкой colspan). Внутри этой ячейки вставьте кнопку с onClick, вызывающую вашу процедуру javascript, чтобы добавить элемент в корзину.

person Keltex    schedule 19.03.2009