2014-10-23 3 views
1

.NET 폼 응용 프로그램에서 gridview가 있고 포스트 백에서 gridview 내의 텍스트 상자에 입력 된 값을 볼 수 없습니다.GridView의 TextBox가 포스트 백에 해당 값을 보유하지 않습니다.

ASPX : 뒤에

<asp:GridView ID="gvItems" runat="server" AutoGenerateColumns="false" ShowHeader="false" DataKeyNames="ItemId" EnableViewState="true"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:TextBox ID="txtItem" runat="server" Text="0" EnableViewState="true" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="ItemId" /> 
    </Columns> 
</asp:GridView> 

<asp:Button runat="server" ID="btn" Text="Submit" OnClick="btn_OnClick" OnClientClick="javascript:return someClientStuff();" /> 

코드 :

protected void btn_OnClick(object sender, System.EventArgs e) 
{ 
    foreach(GridViewRow row in gvItems.Rows) 
    {     
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      var itemId = Convert.ToInt32(gvItems.DataKeys[row.RowIndex].Values[0]); 
      var itemValue = ((row.Cells[0].FindControl("txtItem") as TextBox).Text; 
     } 
} 

내가 각 행에 대해 채워 해당 itemId를보고하고 있지만, 빈 문자열은 항상 itemValue입니다.

양식 신청서를 작성한 이래로 어느 정도 도움이되었습니다.

+1

여기에 'var itemId and itemValue' 범위 문제와 같이 보입니다. 버튼 클릭 후 할당 할 곳은 어디입니까? 또한 페이지로드시'if (IsPostBack) {} '체크가 있습니까? – MethodMan

+0

@DJKRAZE 아무데도 할당하지 않음 - 그냥 디버깅을하고 모든 행에 대해 비어 있음을 알았습니다. – Prabhu

+0

이 게시판의 범위 및 Databind 문제입니다. – MethodMan

답변

3

GridViewDataBindif(!IsPostBack)에없는 것으로 가정합니다. 뷰 상태에서 페이지로드 이벤트 내에서 값을 저장하려고하면 버튼 클릭에 Page_Load

if(!IsPostBack) 
{ 
    gvItems.DataSource = soruceOftheGrid 
    gvItems.DataBind(); 
} 
+0

굉장합니다. 이유가 무엇인지 상기시켜 줄 수 있습니까? 감사합니다 ... – Prabhu

+1

@Prabhu 모든 페이지를로드 할 때마다 계속해서 눈금을 바인딩하고 있습니다. 데이터 소스에서 바인드되지 않은 경우 현재 값을 제거합니다. 도움이된다면 받아 들일 수 있습니다. – mybirthname

0

이 추가, 각 포스트 백, 페이지로드 이벤트로 그리드보기로 다시 viewstate가를 할당하려고 호출됩니다. 페이지로드 내에서 그리드보기로 다시 값을 할당하는 것이 좋습니다. 이렇게하면 입력 한 값을 유지하는 데 도움이됩니다.