2014-11-24 63 views
0

我有一个asp网格,其中数据是动态绑定的。对于同一个网格,我添加了一个带有文本框的新行。问题是添加另一个新行不会保留以前的行数据。如何将新行添加到asp网格时保留上一行值

这里是网格结构和代码。

ASPX代码在这里:

<asp:GridView ID="gvReceivedComponent" runat="server" ShowFooter="true" AutoGenerateColumns="false" CssClass="list"> 
    <HeaderStyle CssClass="searchResultHeader" /> 
    <RowStyle CssClass="searchResultRow" /> 
    <AlternatingRowStyle CssClass="searchResultAltRow" /> 
    <Columns> 
     <asp:BoundField DataField="RowNumber" HeaderText="Row Number" Visible="false" /> 
     <asp:TemplateField HeaderText="Select"> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkItemRetComp" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Component #"> 
      <ItemTemplate> 
       <asp:Label ID="lblgvModel" runat="server" Text='<%# Eval("MODELNO") %>'></asp:Label> 
       <asp:TextBox runat="server" ID="txtModel" Width="85px" MaxLength="20" onkeypress="uppercase();" /> 
       <asp:Button runat="server" ID="btnShowModel" CssClass="searchbutton" Width="20px" Text="..." ToolTip="Search for Model" /> 
       <input type="hidden" id="hdnModelDesc" runat="server" value="" /> 
       <input type="hidden" id="hdnModelIdy" runat="server" value="0" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Component Description"> 
      <ItemTemplate> 
       <asp:Label ID="lblgvModelDesc" runat="server" Text='<%# Eval("MODELDESC") %>'></asp:Label> 
       <asp:TextBox ID="txtModelDesc" runat="server"></asp:TextBox> 
      </ItemTemplate> 

     </asp:TemplateField> 
     <asp:TemplateField HeaderText=" BOM Qty"> 
      <ItemTemplate> 
       <span style="width: 20px"> 
        <asp:Label ID="lblgvBOMRecvCompQty" runat="server" Text='<%# Eval("QTY") %>'></asp:Label></span> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Actual Qty" HeaderStyle-Width="90px"> 
      <ItemTemplate> 
       <asp:TextBox ID="txtActRecvCompQty" Width="30px" runat="server" Text='<%# Eval("QTY") %>' onkeypress="return IsNumeric()" onKeyDown="javascript:return ResetRCompChkBox(event);"></asp:TextBox> 
       <asp:HiddenField ID="hdnFlagtohidegvControls" runat="server" Value='<%#Eval("ISNEW")%>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

C#代码在这里:

void gvReceivedComponent_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      Button btnShowModel = (Button)e.Row.FindControl("btnShowModel"); 
      TextBox txtModel = (TextBox)e.Row.FindControl("txtModel"); 
      TextBox txtModelDesc = (TextBox)e.Row.FindControl("txtModelDesc"); 
      HtmlInputHidden hdnModelDesc = (HtmlInputHidden)e.Row.FindControl("hdnModelDesc"); 
      HtmlInputHidden hdnModelIdy = (HtmlInputHidden)e.Row.FindControl("hdnModelIdy"); 
      HiddenField hdnFlagtohidegvControls = (HiddenField)e.Row.FindControl("hdnFlagtohidegvControls"); 

      btnShowModel.Attributes.Add("onclick", "return ShowDivPopup('" + Constants.LookupCategory.CLIENTCUSTOMERMODEL + "', '" + Constants.LookupCategorySearchParms.CLIENTCUSTOMERMODELSEARCH + "', '" + txtModel.ClientID + "', '" + txtModelDesc.ClientID + "', 'false', '" + frmRecvRepairs.ID + "', '3','" + hdnModelIdy.ClientID + "');"); 

      if (hdnFlagtohidegvControls.Value == "Y") 
      { 
       txtModel.Visible = false; 
       txtModelDesc.Visible = false; 
       btnShowModel.Visible = false; 
      } 
      else 
      { 
       txtModel.Visible = true; 
       txtModelDesc.Visible = true; 
       btnShowModel.Visible = true; 
      } 

     } 

    } 

绑定电网

if (dsRAComponent != null) 
     { 
      if (dsRAComponent.Tables.Count > 0) 
      { 
       dsRAComponent.Tables[0].Columns.Add(new DataColumn("ISNEW")); 
       foreach (DataRow dr in dsRAComponent.Tables[0].Rows) 
       { 
        dr["ISNEW"] = "Y"; 
       } 
       if (dsRAComponent.Tables[0].Rows.Count > 0) 
       { 
        gvReceivedComponent.DataSource = dsRAComponent; 
        gvReceivedComponent.DataBind(); 
       } 
       Session["dsRAComponent"] = dsRAComponent.Tables[0]; 
      } 

添加新行

if (Session["dsRAComponent"] != null) 
     { 
      DataTable dtCurrentTable = (DataTable)Session["dsRAComponent"]; 
      DataRow drCurrentRow; 
      drCurrentRow = dtCurrentTable.NewRow(); 
      drCurrentRow["MODELNO"] = String.Empty; 
      drCurrentRow["MODELDESC"] = String.Empty; 
      drCurrentRow["QTY"] = 0; 
      dtCurrentTable.Rows.InsertAt(drCurrentRow, 0); 
      Session["dsRAComponent"] = dtCurrentTable; 
      //Rebind the Grid with the current data 
      gvReceivedComponent.DataSource = dtCurrentTable; 
      gvReceivedComponent.DataBind(); 
     } 
+0

你在哪里放置您重新绑定代码 – Jags 2014-11-24 05:44:51

+0

@Jags数据集存储在会话,并同时加入按钮点击新行(“添加新行”)的新行被添加。 – 2014-11-24 05:48:05

+0

添加您确定您的会话中的数据表具有所有可用的现有行...可以进行翻译和检查吗? – Jags 2014-11-24 06:04:45

回答

0

在pagelod事件中,您是通过检查来绑定数据的!IsPostBack? 尝试每次绑定它。 希望这有助于。

0

您可以使用ViewState属性来保留以前的数据。 选中此link

相关问题