2010-03-05 7 views
2

내 페이지는 많은 제품과 다양한 크기 옵션이있는 대량 주문 양식입니다.C# GridView ontextchanged 텍스트 상자가있는 동적으로 생성 된 열

레이블이있는 3 개의 정적 열이있는 gridview가 있습니다. 동적으로 빌드 된 일부 열이 있습니다.

동적으로 작성된 각 열에는 텍스트 상자가 있습니다. 텍스트 상자는 수량을 나타냅니다.

텍스트 상자가 변경 될 때마다 입력 된 수량으로 서버를 업데이트하거나 (ontextchanged 이벤트 일 가능성이 있음) 각 행을 열 단위로 반복하고 수량이있는 모든 항목을 수집하고 해당 항목 및 해당 항목을 처리하려고합니다. 수량을 한꺼번에 확인할 수 있습니다 (버튼 클릭시).

if (! Page.IsPostBack) 뒤에 GridView를 빌드하는 프로세스를 넣으면 textchanged 이벤트가 발생하면 gridview는 정적 필드 만 가져오고 동적 필드는 사라집니다.

if (! Page.IsPostBack)를 제거하면 페이지를 수집하고 빌드하는 프로세스가 너무 무거워서 페이지를 다시 렌더링하는 데 너무 오래 걸립니다.

몇 가지 조언을 주시면 감사하겠습니다.

감사합니다.

답변

1

here이라는 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); 
      } 
     } 
    } 
} 

값이 비어 있지 않으면 제품 ID, 크기 옵션 및 수량이있는 작은 배열을 작성했습니다.

이제 장바구니를 수정하기 위해 주문 된 항목을 사용할 수 있습니다.

0

어떻게 동적 열을 작성합니까? 당신은 rowcreated, 같은 rowdatabound 이벤트를 취급하거나 같은 것을 함께 HTML을 주입 렌더링됩니다 옵션을 아약스되어

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

?

+0

나는 전체 포스트 백을 작업 해 왔으며, 정보를 다시 보내기 위해 아약스를 사용하는 방법을 많이 배웠다. 내 목록에 :-) 나는이 프로젝트를 실제로 끝냈다. 열 수는 변수였습니다 (표시되는 특정 항목의 크기 옵션을 기반으로 함). 아래에서 사용한 내용을 게시합니다. – tnriverfish

관련 문제