2008-11-08 7 views
0

asp.net에 표시 할 항목 목록이 있습니다. 각 항목 (행)에 3 개의 텍스트 상자가 있으므로 사용자는 해당 데이터 (전송 비용, 처리 비용, 가격)를보고 변경할 수 있습니다.).편집 가능한 데이터 그리드? 연발총?

이 작업을 수행하는 데 "권장되는"방법은 무엇입니까? 리피터를 사용하면 포스트 백에서 양식 값을 반복해야한다고 가정하고 gridview 컨트롤을 사용하면 onrowdatabound와 Postback에 다른 방법을 오버라이드해야합니다.

나는 둘 다 잘될 것이라고 확신하지만이 상황에서 개발자가 선택한 것은 무엇입니까?

답변

1

은 내가 과거에했던 것은 사용 데이터 바인딩의 GridView TemplateColumns입니다 :

<asp:GridView runat="server" ID="grdRoster" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:TemplateField HeaderText="First Name"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" ID="txtFirstName" Columns="10" Text='<%# Eval("RosterFirstName") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Middle Name"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" ID="txtMiddleName" Columns="10" Text='<%# Eval("RosterMiddleName") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField>      
     <asp:TemplateField HeaderText="Last Name"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" ID="txtLastName" Columns="10" Text='<%# Eval("RosterLastName") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

그런 다음, 다시 게시 (예를 들어, 버튼 클릭 "저장"), 당신이 할 수있는 행을 반복 GridView를 선택하고 텍스트 상자에서 값을 뽑습니다.

foreach (GridViewRow row in grdRoster.Rows) 
{ 
    if (row.RowType == DataControlRowType.DataRow) 
    { 
     string firstName = ((TextBox) row.FindControl("txtRosterFirstName")).Text; 
     string middleName = ((TextBox) row.FindControl("txtRosterMiddleName")).Text; 
     string lastName = ((TextBox) row.FindControl("txtRosterLastName")).Text; 
    } 
} 
+0

감사합니다. 그래서 GridView는 분명히 사용자가 사용하는 것입니다. 나는 단지 궁금했다. 나는 두 가지 모두를 사용했지만 두 솔루션 중 어느 것도 만족스럽지 못했습니다. –

+0

나는 gridview 메소드를 좋아한다고 생각한다. 왜냐하면 당신은 필드에 대한 sane id를 주어야한다. "recid | field"hokey thing의 어떤 이상한 이름이 아니다. Findcontrol은 범위를 특정 행으로 제한하기 때문에이를 제거합니다. Matt 감사합니다. –