<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Demo.aspx.cs" Inherits="Demo" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server" width="80px">
    <title>GridView动态新增行 批量编辑保存</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <div>
                <asp:Button ID="btnAdd" runat="server" Text="新增行" OnClick="btnAdd_Click" />  
                <asp:Button ID="btnSave" runat="server" Text="保存数据" OnClick="btnSave_Click" />
                <br/>新增验证:控件宽度和高度为 非0的正整数<br/>
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDeleting="GridView1_RowDeleting">
                    <Columns>
                        <asp:CommandField ShowDeleteButton="True" />
                        <asp:TemplateField HeaderText="字段名">
                            <ItemTemplate>
                                <asp:Label ID="lblPKID" runat="server" Text='<%# Container.DataItemIndex%>' Visible="false"></asp:Label>
                                <asp:TextBox ID="txtFieldName" runat="server" Width="80px"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="显示名">
                            <ItemTemplate>
                                <asp:TextBox ID="txtFieldTipName" runat="server" Width="80px"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="主键">
                            <ItemTemplate>
                                <asp:DropDownList ID="ddlIsPK" runat="server" Width="80px">
                                    <asp:ListItem Text="否" Value="0" Selected="True"></asp:ListItem>
                                    <asp:ListItem Text="是" Value="1"></asp:ListItem>
                                </asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="可编辑">
                            <ItemTemplate>
                                <asp:DropDownList ID="ddlIsEdit" runat="server" Width="80px">
                                    <asp:ListItem Text="否" Value="0" Selected="True"></asp:ListItem>
                                    <asp:ListItem Text="是" Value="1"></asp:ListItem>
                                </asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="页面显示">
                            <ItemTemplate>
                                <asp:DropDownList ID="ddlIsShow" runat="server" Width="80px">
                                    <asp:ListItem Text="否" Value="0" Selected="True"></asp:ListItem>
                                    <asp:ListItem Text="是" Value="1"></asp:ListItem>
                                </asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="列表显示">
                            <ItemTemplate>
                                <asp:DropDownList ID="ddlIsListShow" runat="server" Width="80px">
                                    <asp:ListItem Text="否" Value="0" Selected="True"></asp:ListItem>
                                    <asp:ListItem Text="是" Value="1"></asp:ListItem>
                                </asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="字段排序">
                            <ItemTemplate>
                                <asp:TextBox ID="txtFieldSort" runat="server" Width="80px"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="控件类别">
                            <ItemTemplate>
                                <asp:DropDownList ID="ddlFieldControl" runat="server" Width="80px">
                                    <asp:ListItem Text="Label" Value="Label" Selected="True"></asp:ListItem>
                                    <asp:ListItem Text="TextBox" Value="TextBox"></asp:ListItem>
                                    <asp:ListItem Text="RadioButtonList" Value="RadioButtonList"></asp:ListItem>
                                    <asp:ListItem Text="CheckBoxList" Value="CheckBoxList"></asp:ListItem>
                                </asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="值组合">
                            <ItemTemplate>
                                <asp:TextBox ID="txtMutiArray" runat="server" Width="80px"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="控件宽度">
                            <ItemTemplate>
                                <asp:TextBox ID="txtControlWidth" runat="server" Width="80px"></asp:TextBox>
                                <asp:RegularExpressionValidator ID="Rev1" runat="server" ErrorMessage="*" ForeColor="Red" ControlToValidate="txtControlWidth" ValidationExpression="^\+?[1-9][0-9]*$" ></asp:RegularExpressionValidator>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="控件高度">
                            <ItemTemplate>
                                <asp:TextBox ID="txtControlHeight" runat="server" Width="80px"></asp:TextBox>
                                <asp:RegularExpressionValidator ID="Rev2" runat="server" ErrorMessage="*" ForeColor="Red" ControlToValidate="txtControlHeight" ValidationExpression="^\+?[1-9][0-9]*$"></asp:RegularExpressionValidator>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="备注">
                            <ItemTemplate>
                                <asp:TextBox ID="txtFieldRemark" runat="server" Width="80px"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </div>
            <asp:Label ID="Label1" runat="server" ></asp:Label>
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
</html>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Demo : System.Web.UI.Page
{
    #region 页面加载
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            CreateTable();
            BindTestData();
        }
    }
    #endregion 

    #region 创建测试数据且绑定
    protected DataTable CreateTable()
    {
        //模拟出一些原始数据绑定DataGrid 
        DataTable dt1 = new DataTable("FieldTable");
        //不设置 默认为System.String
        dt1.Columns.Add("FieldName");
        dt1.Columns.Add("FieldTipName");
        dt1.Columns.Add("IsPK");
        dt1.Columns.Add("IsEdit");

        dt1.Columns.Add("IsShow");
        dt1.Columns.Add("IsListShow");
        dt1.Columns.Add("FieldSort");
        dt1.Columns.Add("FieldControl");
        dt1.Columns.Add("MutiArray");

        dt1.Columns.Add("ControlWidth");
        dt1.Columns.Add("ControlHeight");
        dt1.Columns.Add("FieldRemark");

        dt1.Rows.Add(dt1.NewRow());
        ViewState["ViewDT"] = dt1;
        return dt1;
    }

    protected void BindTestData()
    {
        this.GridView1.DataSource = ViewState["ViewDT"] as DataTable;
        this.GridView1.DataBind();
    }
    #endregion 

    #region 新增行
    protected void btnAdd_Click(object sender, EventArgs e)
    {
        DataTable dt1 = (DataTable)ViewState["ViewDT"];
        //Add new row
        dt1.Rows.Add(dt1.NewRow());
        ViewState["ViewDT"] = dt1;
        BindTestData();
    }
    #endregion 

    #region 删除行
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        int PKID = Convert.ToInt32(((Label)GridView1.Rows[e.RowIndex].FindControl("lblPKID")).Text);
        DataTable tbCategory = (DataTable)ViewState["ViewDT"];
        try { tbCategory.Rows.RemoveAt(PKID); }
        catch { }        
        ViewState["ViewDT"] = tbCategory;
        BindTestData();
    }
    #endregion 

    #region 保存修改
    protected void btnSave_Click(object sender, EventArgs e)
    {
        //批量修改后保存数据
        if (GridView1.Rows.Count > 0)
        {
            Label1.Text = "";
            System.Text.StringBuilder builder = new System.Text.StringBuilder();
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                string PKID = ((Label)GridView1.Rows[i].FindControl("lblPKID")).Text;
                string FieldName = ((TextBox)GridView1.Rows[i].FindControl("txtFieldName")).Text;

                string FieldTipName = ((TextBox)GridView1.Rows[i].FindControl("txtFieldTipName")).Text;
                string IsPK = ((DropDownList)GridView1.Rows[i].FindControl("ddlIsPK")).SelectedValue;
                string IsEdit = ((DropDownList)GridView1.Rows[i].FindControl("ddlIsEdit")).SelectedValue;
                string IsShow = ((DropDownList)GridView1.Rows[i].FindControl("ddlIsShow")).SelectedValue;

                string IsListShow = ((DropDownList)GridView1.Rows[i].FindControl("ddlIsListShow")).SelectedValue;
                string FieldSort = ((TextBox)GridView1.Rows[i].FindControl("txtFieldSort")).Text;
                string FieldControl = ((DropDownList)GridView1.Rows[i].FindControl("ddlFieldControl")).SelectedValue;
                string MutiArray = ((TextBox)GridView1.Rows[i].FindControl("txtMutiArray")).Text;

                string ControlWidth = ((TextBox)GridView1.Rows[i].FindControl("txtControlWidth")).Text;
                string ControlHeight = ((TextBox)GridView1.Rows[i].FindControl("txtControlHeight")).Text;
                string FieldRemark = ((TextBox)GridView1.Rows[i].FindControl("txtFieldRemark")).Text;
                builder.AppendLine(PKID + "____" + FieldName + "____"
                    + FieldTipName + "____" + IsPK + "____" + IsEdit + "____" + IsShow
                    + "____" + IsListShow + "____" + FieldSort + "____" + FieldControl
                    + "____" + MutiArray + "____" + ControlWidth + "____" + ControlHeight
                    + "____" + "____" + FieldRemark + "<br/>");
            }
            Label1.Text = builder.ToString();
        }
        else
        {
            ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "idAlert1", "alert('无数据可保存!')", true);
        }
    }
    #endregion 
}


本文转载:CSDN博客