怎样实现GridView动态添加行的功能???功能描述:在GridView每一行的后面都有一个按钮“添加一行”,当点击这个按钮时,就会出“该行”的后面添加一个空行,用来添加数据。其实这个GridView+TextBox是用来模拟Excel录入的,这个“动态添加行”,也就是模拟Excel插入行的功能。请问这样的功能怎样实现???

解决方案 »

  1.   

     protected void Button1_Click(object sender, EventArgs e)
        {
            DataTable dt = ReadGridView();
            //this.GridView1.DataSource = dt;
            //this.GridView1.DataBind();
            DataRow row = dt.NewRow();
            row.ItemArray = new object[] { "oec2003","oec2003","oec2003" };
            dt.Rows.InsertAt(row, 0);
            dt.AcceptChanges();
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
      

  2.   

    http://topic.csdn.net/u/20080903/14/80fd813a-3242-470e-be1d-292b8598448e.html
      

  3.   

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="VSG.Web._Default" %><!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">
        <title></title>.
        <style type="text/css">
            body
            {
                font-size: 12px;
                text-align: center;
            }
            .TextBox
            {
                border-right: #ffffff 0px solid;
                border-top: #ffffff 0px solid;
                font-size: 9pt;
                border-left: #ffffff 0px solid;
                border-bottom: #c0c0c0 1px solid;
                background-color: #ffffff;
            }
            table.gridview_m
            {
                border-collapse: collapse;
                border: solid 1px #93c2f1;
                width: 98%;
                font-size: 10pt;
            }
            table.gridview_m td, th
            {
                border-collapse: collapse;
                border: solid 1px #ffffff;
                font-size: 10pt;
            }
            table.gridview_m1
            {
                border-collapse: collapse;
                border: solid 1px #93c2f1;
                width: 98%;
                font-size: 10pt;
            }
            table.gridview_m1 td1, th1
            {
                border-collapse: collapse;
                border: solid 1px #93c2f1;
                font-size: 10pt;
            }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
        <div style="text-align: center">
            <asp:GridView ID="Gv1" runat="server" AutoGenerateColumns="False" Height="1px" OnRowDeleting="Gv1_RowDeleting"
                CssClass="gridview_m1" onrowcommand="Gv1_RowCommand">
                <RowStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                <Columns>
                    <asp:TemplateField HeaderText="编号">
                        <ItemTemplate>
                            <%# Container.DataItemIndex+1 %>
                            <asp:Label ID="Lb_Index" runat="server" Text='<%# Container.DataItemIndex+1 %>' Visible="false"></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="现任职务">
                        <ItemTemplate>
                            <asp:TextBox ID="Txt_Cposition" runat="server" Text='<%#Eval("Cposition")%>' CssClass="TextBox"></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="姓名">
                        <ItemTemplate>
                            <asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("UserName")%>' CssClass="TextBox"></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="一月份">
                        <ItemTemplate>
                            <asp:TextBox ID="Txt_Jan" runat="server" Text='<%#Eval("JanCount")%>' CssClass="TextBox"></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="二月份">
                        <ItemTemplate>
                            <asp:TextBox ID="Txt_Feb" runat="server" Text='<%#Eval("FebCount")%>' CssClass="TextBox"></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="删除">
                        <ItemTemplate>
                            <asp:LinkButton ID="Lkb_delete" runat="server" CommandName="delete" Text="删除" CommandArgument='<%# Container.DataItemIndex+1 %>'></asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="操作">
                        <ItemTemplate>
                            <asp:LinkButton ID="btnRowConfirm" runat="server" Text="结果确认" CommandName="ConfirmResult" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
            <p>
                &nbsp;</p>
            <p>
                职务:<asp:TextBox ID="txt_Cp" runat="server" CssClass="TextBox"></asp:TextBox></p>
            <p>
                姓名:<asp:TextBox ID="txt_Un" runat="server" CssClass="TextBox"></asp:TextBox></p>
            <p>
                一月:<asp:TextBox ID="txt_Jn" runat="server" CssClass="TextBox"></asp:TextBox></p>
            <p>
                二月:<asp:TextBox ID="txt_Fb" runat="server" CssClass="TextBox"></asp:TextBox></p>
            <p>
                <asp:Button ID="Btn_Add" runat="server" OnClick="Btn_Add_Click" Text="添加" />
            </p>
        </div>
        </form>
    </body>
    </html>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;using System.Data;
    using System.Collections;namespace VSG.Web
    {
        public partial class _Default : System.Web.UI.Page
        {
            Hashtable ht = new Hashtable();//记录ID和索引
            DataTable Data = new DataTable();
            protected void Page_Load(object sender, EventArgs e)
            {            if (ViewState["Data"] != null)
                {
                    GridViewBind(this.Gv1, ViewState["Data"] as DataTable);
                }
                else
                {                Data.Columns.Add("Cposition");
                    Data.Columns.Add("UserName");
                    Data.Columns.Add("JanCount");
                    Data.Columns.Add("FebCount");
                    Data.Rows.Add(new object[] { "卑鄙副总工程师", "张1", "98", "94" });
                    Data.Rows.Add(new object[] { "矿建副总工程师", "张2", "99", "94" });
                    Data.Rows.Add(new object[] { "机电副总工程师", "张3", "95", "93" });
                    Data.Rows.Add(new object[] { "基建副总工程师", "张4", "93", "91" });
                    GridViewBind(this.Gv1, Data);
                    ViewState["Data"] = Data;
                }            Data = ViewState["Data"] as DataTable;
                if (Data.Rows.Count > 0)
                {
                    for (int i = 0; i < Data.Rows.Count; i++)
                    {
                        //这里应该存一个唯一键 来记录索引
                        //添加这个索引是为了后面删除和更新很方便的找到
                        ht.Add(i + 1, i);
                    }
                }
            }
            protected void Gv1_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
                //如果不为空就取出来
                if (ViewState["Data"] != null)
                {
                    Data = ViewState["Data"] as DataTable;
                }
                //取当前行ID
                int id = Convert.ToInt32((this.Gv1.Rows[e.RowIndex].FindControl("Lkb_delete") as LinkButton).CommandArgument);
                //匹配索引
                int index = Convert.ToInt32(ht[id]);
                //移除行
                this.Data.Rows.RemoveAt(index);
                //绑定数据
                GridViewBind(this.Gv1, Data);
                //保存数据
                ViewState["Data"] = Data;        }
            protected void Btn_Add_Click(object sender, EventArgs e)
            {
                //先取出ViewState["Data"]是否为空.
                if (ViewState["Data"] != null)
                {
                    Data = ViewState["Data"] as DataTable;
                }
                else
                {
                    Data = CreateTable(0);
                }
                Data.Rows.Add(new object[] { this.txt_Cp.Text, this.txt_Un.Text, this.txt_Jn.Text, this.txt_Fb.Text });//添加行
                GridViewBind(this.Gv1, Data);//绑定
                //同时加入ViewState["Data"]
                ViewState["Data"] = Data;
            }        /// <summary>
            /// 空行数
            /// </summary>
            /// <param name="Count"></param>
            /// <returns></returns>
            private DataTable CreateTable(int Count)
            {
                DataTable Data = new DataTable();
                Data.Columns.Add("Cposition");
                Data.Columns.Add("UserName");
                Data.Columns.Add("JanCount");
                Data.Columns.Add("FebCount");
                if (Count > 0)
                {
                    for (int i = 0; i < Count; i++)
                    {
                        Data.Rows.Add(new object[] { "", "", "", "" });
                    }
                }
                return Data;
            }        private void GridViewBind(GridView GV, DataTable dt)
            {
                if (dt.Rows.Count != 0)
                {
                    GV.DataSource = dt;
                }
                else
                {
                    GV.DataSource = null;
                    GV.EmptyDataText = "没有可以显示的数据";
                }
                GV.DataBind();
            }        protected void Gv1_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandSource.GetType() == typeof(LinkButton) && e.CommandName == "ConfirmResult")
                {
                    this.ClientScript.RegisterStartupScript(GetType(), "", "<script>alert('ddddd');</script>");
                }
            }
        }
    }
      

  4.   

    看起来,你想做一个编辑操作中从来不重新绑定数据源的GridView应用。那么就要直接对GridView.Rows操作,你也无须对什么数据保存到ViewState,因为GridView自己会维持它的状态。
      

  5.   

    从数据库中查询DataTable,然后在数据库中插入一行,把序号指定到“该行”的后面然后重新绑定。