2016-07-05 9 views
0

Ich habe eine Rasteransicht, die 4 Vorlagenfelder enthält, von denen jedes ein Textfeld enthält. Jetzt habe ich diese Vorlagenfelder mit einer Datenquelle gebunden. Wenn ich als Benutzer einige Daten in das Textfeld eintippe und auf Speichern klicke (eine Schaltfläche, die nicht Teil von Gridview ist, sondern eine individuelle im Webformular), kann ich die Werte nicht im Click-Ereignishandler abrufen im Code hinter der Datei. Bitte hilf mir.Asp.net Rasteransicht Vorlage Felder Daten persistent

aspx Datei

<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>

-Code hinter Datei

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

Möglicherweise müssen Sie auch Ihren HTML-Code – techspider

Antwort

0

Sie müssen sich durch die GridViewRowCollection Schleife und dann für jede Zeile, die Kontrolle durch die Id Sie finden gab es im Markup. Zum Beispiel:

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 
    } 
} 

Update: Stellen Sie sicher, dass, wenn Sie die Datenquelle tun Bindung, es geschieht nur in der Anfangslast und nicht auf nachfolgende Postbacks, sonst Ihre Änderungen jedes Mal zurückgesetzt.

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

Nop hinzufügen. Es funktioniert nicht. Wenn ich die Werte aus einer Datenquelle, der gleiche Wert zurückgibt, aber wenn ich Daten in das Textfeld (als Benutzer) ändern, gibt es nur Daten in der Datenquelle – user3107338

+0

@ user3107338 Ich habe nicht die Datenbindungslogik gesehen aber machen Sicher, es passiert nur beim ersten Laden. Siehe aktualisierte Antwort. –

+0

wow. habe vergessen, diese Post-Back-Bedingung zu stellen. Danke ein lottttttt für den Vorschlag. – user3107338