2015-10-17 34 views
1

如果我行添加到使用jQuery GridView中,我将能够与获得新添加的行:将行添加到使用jQuery一个GridView和保存

foreach (GridViewRow row in gvMyGridView.Rows) 
{ 

} 

我怎么能添加行,因此他们可能在代码后面迭代?

+0

http://www.aspsnippets.com/Articles/Dynamically-Add-Rows-to-GridView-using-JavaScript-on-Button-Click-in-ASPNet.aspx – Damith

回答

1

我把我的Gridview控件放在更新面板中,并设置一个异步触发器指向我的添加按钮(这样当添加新行时不会刷新整个页面)。

然后在后面的代码中,我将新行添加到数据表。将数据表保存在viewstate中,并将gridview重新绑定到viewstate。然后,当从gridview中获取数据时,循环查看状态数据表行。

不知道这是否是最好的解决方案,但它迄今为止一直在为我工作。

protected void cmdAdd(){ 
    datatable table=(datatable)viewstate["savedTable"]; 
    datarow row = table.newRow; 
    row["myColumnName"]=txtSomething.text; 
    datatable.rows.add(row); 

    viewstate["savedTable"]=table; 
    grid.datasource=viewstate["savedTable"]; 
    grid.databind(); 
    // or create your own functions to make the code reusable 
} 

protected void cmdSave(){ 
    datatable table=viewstate["savedTable"]; 
    foreach(datarow row in table.rows){ 
    //do stuff 
} 
} 

我通常使用的引导模态将新行添加到我的网格,并呼吁从这些代码模式通过网格标题后面的按钮。

所以我的GridView的HTML看起来像这样:

<asp:UpdatePanel runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional"> 
          <ContentTemplate> 
           <asp:GridView runat="server" ID="stockTakeGrid" 
            CssClass="table table-striped table-bordered table-condensed table-hover" 
            AllowPaging="true" PageSize="8" OnPageIndexChanging="stockTakeGrid_PageIndexChanging" 
            ShowHeaderWhenEmpty="true" 
            OnRowCommand="stockTakeGrid_RowCommand" 
            OnRowDataBound="stockTakeGrid_RowDataBound"> 
            <Columns> 
             <asp:TemplateField> 
               <ItemTemplate> 
                <asp:LinkButton runat="server" ID="cmdEdit" CssClass="btn" ToolTip="Edit Stock" 
                 CommandName="editStock" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"> 
                 <span><i class=" glyphicon glyphicon-pencil"></i></span> 
                </asp:LinkButton> 
               </ItemTemplate> 
             </asp:TemplateField> 
             <asp:BoundField DataField="ITEMCODE" HeaderText="Item Code" /> 
             <asp:BoundField DataField="ITEMDESC" HeaderText="Item Desc" /> 
             <asp:BoundField DataField="ONHAND" HeaderText="Stock On Hand" /> 
             <asp:BoundField DataField="STCOUNT" HeaderText="Stock Count" /> 
             <asp:BoundField DataField="VARIANCE" HeaderText="Variane" /> 
             <asp:BoundField DataField="PRICE" HeaderText="Price" /> 
             <asp:BoundField DataField="VALUE" HeaderText="Value" DataFormatString="{0:0,0.00}" /> 
             <asp:BoundField DataField="COMMENT" HeaderText="Comment" /> 
            </Columns> 
            <PagerStyle CssClass="pagination-ys" /> 
           </asp:GridView> 
          </ContentTemplate> 
          <Triggers> 
           <asp:AsyncPostBackTrigger ControlID="cmbLocation" EventName="selectedindexchanged" /> 
           <asp:AsyncPostBackTrigger ControlID="cmdSaveLine" EventName="click" /> 
          </Triggers> 
         </asp:UpdatePanel> 

然后我的HTML模式是这样的:

      <!--Item Modal--> 
     <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
      <div class="modal-dialog modal-lg"> 
      <div class="modal-content"> 
       <div class="modal-header"> 
       <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
       <h4 class="modal-title" id="myModalLabel">Set actual stock count</h4> 
       </div> 
       <div class="modal-body"> 
        <asp:UpdatePanel runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false"> 
         <ContentTemplate> 
         <div class="form-group"> 
          <asp:Label runat="server" CssClass="control-label col-md-2 ">Item Code</asp:Label> 
          <div class="col-md-2"> 
           <asp:TextBox runat="server" ID="txtItemCode" CssClass="form-control" ReadOnly="true"></asp:TextBox> 
          </div> 
          <div class="col-md-6"> 
           <asp:TextBox runat="server" ID="txtItemDesc" CssClass="form-control" ReadOnly="true"></asp:TextBox> 
          </div> 
         </div> 
         <div class="form-group"> 
          <asp:Label runat="server" CssClass="control-label col-md-2">Stock on Hand</asp:Label> 
          <div class="col-md-2"> 
           <asp:TextBox runat="server" ID="txtOnHand" CssClass="form-control" ReadOnly="true"></asp:TextBox> 
          </div> 
         </div> 
         <div class="form-group"> 
          <asp:Label runat="server" CssClass="control-label col-md-2">Stock Count</asp:Label> 
          <div class="col-md-2"> 
           <asp:TextBox runat="server" ID="txtSTCount" CssClass="form-control decimal-empty"></asp:TextBox> 
          </div> 
         </div> 
         <div class="form-group"> 
          <asp:Label runat="server" CssClass="control-label col-md-2">Comment</asp:Label> 
          <div class="col-md-10"> 
           <asp:TextBox runat="server" CssClass="form-control" TextMode="MultiLine" ID="txtComment" ></asp:TextBox> 
          </div> 
         </div> 
         </ContentTemplate> 
         <Triggers> 
          <asp:AsyncPostBackTrigger ControlID="stockTakeGrid" EventName="rowcommand" /> 
         </Triggers> 
        </asp:UpdatePanel> 
       </div> 
       <div class="modal-footer"> 
        <asp:UpdatePanel runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false"> 
         <ContentTemplate> 
         <asp:Button runat="server" ID="cmdSaveLine" CssClass="btn btn-info pull-left" Text="Save" 
          OnClientClick="$('#myModal').modal('hide');" OnClick="cmdSaveLine_Click" /> 
         </ContentTemplate> 
        </asp:UpdatePanel> 
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
       </div> 
       </div> 
       </div> 
      </div> 

希望这有助于!

+0

请问您可以添加gridview和更新面板代码将在aspx页面中出现? –