C # GridView динамически построенные столбцы с текстовыми полями на обмене - PullRequest
2 голосов
/ 05 марта 2010

Моя страница представляет собой блочную форму заказа, в которой имеется множество товаров и варианты различных размеров.

У меня есть сетка, в которой есть 3 статических столбца с метками. Затем есть несколько динамически построенных столбцов.

Каждый из динамически построенных столбцов содержит текстовое поле. Текстовое поле для количества.

Попытка либо обновить сервер введенным количеством при каждом изменении текстового поля (возможно, событие ontextchanged), либо выполнить цикл по каждой из строк столбец за столбцом и собрать все элементы, имеющие количество, и обработать эти элементы и их количества все сразу (при нажатии на кнопку).

Если я помещу процесс, который создает GridView, в if (! Page.IsPostBack), то при запуске события с измененным текстом gridView получает только статические поля, а динамические пропали.

Если я удалю if (! Page.IsPostBack), процесс сбора и построения страницы будет слишком трудоемким при обработке и займет слишком много времени для повторной визуализации страницы.

Некоторые советы будут оценены.

Спасибо

Ответы [ 2 ]

1 голос
/ 08 марта 2010

Я закончил строить столбцы динамически частично, изменив и используя GridViewTemplate.cs, который я нашел здесь .

Поскольку мои текстовые поля были названы на основе имени их столбца (которое основывалось на параметрах размера), я смог циклически просмотреть параметры размера и использовать FindControl, чтобы получить текстовое поле и его значение.

protected void cmdSave_OnClick(object sender, EventArgs e)
{
    ArrayList itemsOrdered = new ArrayList();
    foreach (GridViewRow gvr in gvMainOrderForm.Rows)
    {
        Label lblItemId = (Label)(gvr.FindControl("lblItemId"));
        string itemId = lblItemId.Text;
        foreach (string availableOption in availableOptions)
        {
            TextBox tb = (TextBox)(gvr.FindControl("tb" + availableOption));
            if (tb != null && tb.Text != "")
            {
                ArrayList itemOrdered = new ArrayList();
                itemOrdered.Add(itemId);
                itemOrdered.Add(availableOption);
                itemOrdered.Add(tb.Text);
                itemsOrdered.Add(itemOrdered);
            }
        }
    }
}

Если значение не было пустым, я создал небольшой массив, в котором были указаны идентификатор продукта, размер и количество.

Теперь я смогу использовать заказанные товары, чтобы изменить свою корзину.

0 голосов
/ 08 марта 2010

как вы строите динамические столбцы?вы обрабатываете события, такие как rowdatabound, rowcreated, или вы рендерите внедренный html чем-то вроде:

<asp:Gridview ...>
<Columns>
    <asp:TemplateField ...>    
        <ItemTemplate>   
           <%# GetDynamicHtml(Container.DataItem) %>
        </ItemTemplate>
    </asp:TemplateField
...

Является ли ajax опцией?

...