2010-03-05 2 views
2

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

У меня есть gridview, у которого есть 3 статических столбца с метками. Есть некоторые динамически построенные столбцы.

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

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

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

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

Некоторые рекомендации будут оценены.

Thanks

ответ

1

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

Поскольку мои текстовые поля были названы в соответствии с их именем столбца (которое было основано на параметрах размера), мне удалось прокрутить параметры размера и использовать 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); 
      } 
     } 
    } 
} 

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

Теперь я смогу использовать itemsOrdered для изменения моей корзины покупок.

0

как вы строите динамические столбцы? вы обработки событий, таких RowDataBound, rowcreated, или вы рендеринга HTML впрыскивается с чем-то вроде:

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

ли АЯКС вариант?

+0

Я работал с полными postbacks и не многому научился использовать ajax для отправки информации ... в моем списке :-) Я действительно закончил эту часть моего проекта. Число столбцов было переменной (на основе параметров размера для отдельных отображаемых элементов). Я опубликую то, что я использовал ниже. – tnriverfish

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