GridView动态添加一编辑行

来源:互联网 发布:淘宝2000的碳纤维车架 编辑:程序博客网 时间:2024/05/08 23:13

这几天遇到了怎样给GridView动态增加一编辑行的需求,因为之前一直没有碰到过,所以一时也不知道怎么实现。后来通过百度看了一些大神给的解决方案和例子,自己也转载了一篇实现这个功能的博客。方法总的来说,很多也很灵活,有的说用DataTable先取GridView里面的数据,再增加一行,然后再绑定到GridView。有的说用js+table也可以解决。


通过我一下午的努力,照着别人的博客也写了个Demo,严格来说,这种不是点击增加一行,而是给人的错觉是增加一行而已。也就是在GridView下面再加一个同样长的Table,然后对应的列中加入TextBox,再在Table下面增加一个按钮,点击按钮把Table里面的内容存到数据库,然后取出来绑定到GridView中。


下面是我的流程和代码:

1.前台,先加一个GridView控件,再在下面加一个Table,再加一个button

<%--GridView开始--%>            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" EmptyDataText="没有记录">                <Columns>                    <asp:BoundField HeaderText="品牌" DataField="品牌" ItemStyle-Width="100" />                    <asp:BoundField HeaderText="价格" DataField="价格" ItemStyle-Width="100" />                    <asp:BoundField HeaderText="数量" DataField="数量" ItemStyle-Width="100" />                    <asp:BoundField HeaderText="生产日期" DataField="生产日期" DataFormatString="{0:M-dd-yyyy}" ItemStyle-Width="100" />                    <asp:BoundField HeaderText="商品详情" DataField="商品详情" ItemStyle-Width="100" />                    <asp:BoundField HeaderText="生产地" DataField="生产地" ItemStyle-Width="100" />                </Columns>            </asp:GridView>            <%--GridView结束--%>            <%--Table开始--%>            <table border="1" style="border-collapse:collapse;">                <tr>                    <td>                        <asp:TextBox ID="TextBox1" runat="server" Width="93"></asp:TextBox>                    </td>                    <td>                        <asp:TextBox ID="TextBox2" runat="server" Width="93"></asp:TextBox>                    </td>                    <td>                        <asp:TextBox ID="TextBox3" runat="server" Width="93"></asp:TextBox>                    </td>                    <td>                        <asp:TextBox ID="TextBox4" runat="server" Width="93"></asp:TextBox>                    </td>                    <td>                        <asp:TextBox ID="TextBox5" runat="server" Width="93"></asp:TextBox>                    </td>                    <td>                        <asp:TextBox ID="TextBox6" runat="server" Width="93"></asp:TextBox>                    </td>                </tr>            </table>            <%--Table结束--%>            <%--Button开始--%>            <asp:Button ID="Button1" runat="server" Text="添加" OnClick="Button1_Click" />            <%--Button结束--%>



2.后台代码:

protected void Page_Load(object sender, EventArgs e)        {            if(!IsPostBack)            {                string con = ConfigurationManager.ConnectionStrings["con"].ToString();                SqlConnection sqlcon = new SqlConnection(con);                string sql = "select 品牌,价格,数量,商品详情,生产日期,生产地 from Shuma";                sqlcon.Open();                SqlDataAdapter sqlda = new SqlDataAdapter(sql, sqlcon);                DataSet ds = new DataSet();                sqlda.Fill(ds);                sqlcon.Close();                if(ds.Tables[0].Rows.Count == 0)                {                    DataTable dt = new DataTable();                    dt.Columns.Add("品牌");                    dt.Columns.Add("价格");                    dt.Columns.Add("数量");                    dt.Columns.Add("商品详情");                    dt.Columns.Add("生产日期");                    dt.Columns.Add("生产地");                    if(dt.Rows.Count == 0)                    {                        dt.Rows.Add(dt.NewRow());                    }                    GridView1.DataSource = dt;                    GridView1.DataBind();                    GridView1.Rows[0].Cells[0].Text = "暂无记录";                    GridView1.Rows[0].Cells[1].Text = "暂无记录";                    GridView1.Rows[0].Cells[2].Text = "暂无记录";                    GridView1.Rows[0].Cells[3].Text = "暂无记录";                    GridView1.Rows[0].Cells[4].Text = "暂无记录";                    GridView1.Rows[0].Cells[5].Text = "暂无记录";                }                else                {                    GridView1.DataSource = ds;                    GridView1.DataBind();                }            }        }        protected void Button1_Click(object sender, EventArgs e)        {            string brand = TextBox1.Text.ToString();            int price =Convert.ToInt32(TextBox2.Text);            int number = Convert.ToInt32(TextBox3.Text);            DateTime productdate = Convert.ToDateTime(TextBox4.Text);            string text = TextBox5.Text.ToString();            string place = TextBox6.Text.ToString();            string con = ConfigurationManager.ConnectionStrings["con"].ToString();            SqlConnection sqlcon = new SqlConnection(con);            string sql = "insert into Shuma(品牌,价格,数量,商品详情,生产日期,生产地) values('"+brand+"','"+price+"','"+number+"','"+text+"','"+productdate+"','"+place+"')";            string sqlstr = "select 品牌,价格,数量,商品详情,生产日期,生产地 from Shuma";            sqlcon.Open();            SqlCommand sqlcom = new SqlCommand(sql,sqlcon);            sqlcom.ExecuteNonQuery();            SqlDataAdapter sqlda = new SqlDataAdapter(sqlstr,sqlcon);            DataSet ds = new DataSet();            sqlda.Fill(ds);            GridView1.DataSource = ds;            GridView1.DataBind();            sqlcon.Close();        }    }

3.解释:

针对Page_Load()函数

先从数据库里取数据放到ds(DataSet对象)中。if(ds.Tables[0].Rows.Count==0)用来判断ds中有没有数据。

如果没有,自己新建一个dt(DataTable对象),再在dt中做文章,给它加入列名(这个就对应的GridView的列名),作用是让GridView在没有数据的情况下依旧显示出表头,dt.Rows.Add(dt.NewRow())这句话是用来给它加一个空行。GridView1.Rows[0].Cells[0].Text = "暂无记录"这句话是给新加的空行赋值(告诉用户没有记录)。

如果有,GridView绑定ds,然后显示出来。


针对Button1_Click函数

分两步:

第一步,将TextBox里面的数据存到数据库中。

第二步,将数据库里面的数据取出来绑定到GridView然后显示出来。


综上所述,这种方法并不是真的增加一行,只是让用户觉得增加一行而已或者让用户始终感觉有可以输入的行。

26 0
原创粉丝点击