就是要在指定的位置增加新行,不要在最后增加。网上这样的帖子也没好的回答,请高手帮忙。

解决方案 »

  1.   


    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("str1") %>'></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox2" runat="server" Text='<%# Eval("str2") %>'></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox3" runat="server" Text='<%# Eval("str3") %>'></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="增加行" />
                            <asp:Button ID="Button2" runat="server" Text="删除行" onclick="Button2_Click" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("str1");
                dt.Columns.Add("str2");
                dt.Columns.Add("str3");
                for (int i = 0; i < 5; i++)
                {
                    DataRow dr = dt.NewRow();
                    dt.Rows.Add(dr);
                }
                this.GridView1.DataSource = dt;
                this.GridView1.DataBind();
            }
        }    protected void Button1_Click(object sender, EventArgs e)
        {
            // 行号
            int row = ((GridViewRow)((Button)sender).NamingContainer).RowIndex;
            DataTable dt = new DataTable();
            dt.Columns.Add("str1");
            dt.Columns.Add("str2");
            dt.Columns.Add("str3");
            foreach (GridViewRow item in this.GridView1.Rows)
            {
                DataRow dr = dt.NewRow();
                dr["str1"] = ((TextBox)item.Cells[0].FindControl("TextBox1")).Text;
                dr["str2"] = ((TextBox)item.Cells[0].FindControl("TextBox2")).Text;
                dr["str3"] = ((TextBox)item.Cells[0].FindControl("TextBox3")).Text;
                dt.Rows.Add(dr);
            }
            dt.Rows.InsertAt(dt.NewRow(), row+1);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }    protected void Button2_Click(object sender, EventArgs e)
        {
            // 行号
            int row = ((GridViewRow)((Button)sender).NamingContainer).RowIndex;
            DataTable dt = new DataTable();
            dt.Columns.Add("str1");
            dt.Columns.Add("str2");
            dt.Columns.Add("str3");
            foreach (GridViewRow item in this.GridView1.Rows)
            {
                DataRow dr = dt.NewRow();
                dr["str1"] = ((TextBox)item.Cells[0].FindControl("TextBox1")).Text;
                dr["str2"] = ((TextBox)item.Cells[0].FindControl("TextBox2")).Text;
                dr["str3"] = ((TextBox)item.Cells[0].FindControl("TextBox3")).Text;
                dt.Rows.Add(dr);
            }
            dt.Rows.RemoveAt(row);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
      

  2.   

    绑定DataGridView的table有Rows.InsertAt(Row,Index),可以加到任意位置,然后重新绑定到DataGridView可实现你要的效果
      

  3.   


        protected void Button1_Click(object sender, EventArgs e)
        {
            // 行号
            int row = ((GridViewRow)((Button)sender).NamingContainer).RowIndex;
            DataTable dt = new DataTable();
            dt.Columns.Add("str1");
            dt.Columns.Add("str2");
            dt.Columns.Add("str3");
            foreach (GridViewRow item in this.GridView1.Rows)
            {
                DataRow dr = dt.NewRow();
                dr["str1"] = ((TextBox)item.Cells[0].FindControl("TextBox1")).Text;
                dr["str2"] = ((TextBox)item.Cells[1].FindControl("TextBox2")).Text;
                dr["str3"] = ((TextBox)item.Cells[2].FindControl("TextBox3")).Text;
                dt.Rows.Add(dr);
            }
            dt.Rows.InsertAt(dt.NewRow(), row+1);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }    protected void Button2_Click(object sender, EventArgs e)
        {
            // 行号
            int row = ((GridViewRow)((Button)sender).NamingContainer).RowIndex;
            DataTable dt = new DataTable();
            dt.Columns.Add("str1");
            dt.Columns.Add("str2");
            dt.Columns.Add("str3");
            foreach (GridViewRow item in this.GridView1.Rows)
            {
                DataRow dr = dt.NewRow();
                dr["str1"] = ((TextBox)item.Cells[0].FindControl("TextBox1")).Text;
                dr["str2"] = ((TextBox)item.Cells[1].FindControl("TextBox2")).Text;
                dr["str3"] = ((TextBox)item.Cells[2].FindControl("TextBox3")).Text;
                dt.Rows.Add(dr);
            }
            dt.Rows.RemoveAt(row);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }