2016-07-05 2 views
0

각 텍스트 상자가 들어있는 4 개의 템플릿 필드가 포함 된 표보기가 있습니다. 이제 이러한 템플릿 필드를 데이터 소스로 바인딩했습니다. 사용자가 텍스트 상자에있는 일부 데이터를 입력하고 저장 단추 (webform의 개별 요소가 아니라 GridView의 일부가 아닌 단추)를 클릭하면 click 이벤트 처리기에서 값을 가져올 수 없습니다. 코드 숨김 파일. 도와주세요.Asp.net 표보기 템플릿 필드 데이터 지속

영문 파일 파일 뒤에

<asp:TemplateField HeaderText="col1"> 
 
    <ControlStyle Height="25px" Width="60px" /> 
 
     <ItemTemplate> 
 
      <asp:TextBox ID="txt1" runat="server" Text='<%# Bind("[col1]") %>'> 
 
      </asp:TextBox>     
 
     </ItemTemplate> 
 
    </asp:TemplateField> 
 
    
 
<asp:TemplateField HeaderText="col2"> 
 
    <ControlStyle Height="25px" Width="60px" /> 
 
    <ItemTemplate> 
 
     <asp:TextBox ID="txt2" runat="server" Text='<%# Bind("[col2]") %>'> 
 
     </asp:TextBox> 
 
    </ItemTemplate> 
 
</asp:TemplateField> 
 
    
 
<asp:TemplateField HeaderText="col3"> 
 
    <ControlStyle Height="25px" Width="60px" /> 
 
    <ItemTemplate> 
 
     <asp:TextBox ID="txt3" runat="server" Text='<%# Bind("[col3]") %>'> 
 
     </asp:TextBox> 
 
    </ItemTemplate> 
 
</asp:TemplateField> 
 
    
 
<asp:TemplateField HeaderText="col4"> 
 
    <ControlStyle Height="25px" Width="60px" /> 
 
    <ItemTemplate> 
 
     <asp:TextBox ID="txt4" runat="server" Text='<%# Bind("[col4]") %>'> 
 
     </asp:TextBox> 
 
    </ItemTemplate>  
 
</asp:TemplateField>

코드를

protected void ButtonAdd_Click(object sender, EventArgs e) 
{ 

    foreach (GridViewRow row in gvEdit.Rows) 
    { 



      string a = ((TextBox)row.FindControl("col1")).Text; 
       //above line gives a null value 


    } 
} 
+2

너도 HTML을 추가해야 할 수도 있습니다. – techspider

답변

0

당신은 GridViewRowCollection을 통해 루프해야하고, 각 행의 Id 당신에 의한 제어를 찾을 수 마크 업에서 그것을 주었다.

protected void ButtonAdd_Click(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in gvEdit.Rows) 
    { 
     var txt1 = row.FindControl("txt1") as TextBox; 
     var txt2 = row.FindControl("txt2") as TextBox; 
     var txt3 = row.FindControl("txt3") as TextBox; 
     var txt4 = row.FindControl("txt4") as TextBox; 

     // access the Text property of each, e.g. txt1.Text 
    } 
} 

업데이트 : 예를 들어 그렇지 않으면 변경 때마다 초기화됩니다, 이후의 포스트 백 데이터 소스 바인딩을 수행 할 때, 그것은 단지 초기로드에서 발생하는지 확인하지합니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     GridView1.DataSource = // data source 
     GridView1.DataBind(); 
    } 
} 
+0

Nop. 그것은 작동하지 않습니다. 데이터 소스에서 값을 제공하면 같은 값이 반환되지만 텍스트 상자 (사용자)의 dat을 수정하면 데이터 소스의 데이터 만 반환됩니다. – user3107338

+0

@ user3107338 데이터 바인딩 논리를 보지 못했지만 만들 수 없습니다. 초기 하중에서만 발생합니다. 업데이트 된 답변보기 –

+0

와우. 그 포스트를 다시 놓는 것을 잊어 버렸습니다. 제안 해 주셔서 감사합니다. – user3107338