当前位置:编程学习 > C#/ASP.NET >>

gridview 数据保存问题?

gridview 里的数据从数据库中读出
例如
 id name 
  1  小东
  2  小明

下边有按钮 添加 删除 修改 保存 

如何做到 点击按钮添加数据在gridview中显示
id name 
  1  小东
  2  小明
  3  大鹏 

但是此时不添加数据库

有个保存按钮 然后再插入数据库中 (类似还有点击一行可进行删除和修改,点击保存才真正保存到数据库)

希望大家可以帮住我,最好有实现代码或者详细些! --------------------编程问答-------------------- 关注  --------------------编程问答-------------------- 如果非要用gridview ,可先动态插入数据源(datatable或集合)。

用泛型集合相对更快一些。

还有一种方法,可以用JS来实现,动态插入表格和内容。

如果非要用gridview,可生成后看源码,看下布局结构以及其id,name 等属性 ,然后用JS进行动态插入。
  --------------------编程问答-------------------- 你可以应用 SqlCommandBuilder 

先把记录集保存到 DataTable 中,然后操作 DataTable 
当保存的时候 使用 SqlCommandBuilder  去保存 操作的 DataTable  --------------------编程问答-------------------- 把你增加的先添加到一个集合里吧  点保存在真正的保存到数据库 --------------------编程问答-------------------- 只为顶一下。 --------------------编程问答--------------------

create table GridViewDemoTable
(
    [ID] int identity(1,1) primary key,
    [Name] varchar(20) unique,
    [Department] varchar(20)
)
insert into GridViewDemoTable ([Name],[Department]) select '张三','市场部'
union all select '李四','研发部'
union all select '王二','策划部'
union all select '薛七','销售部'
union all select '丁一','财务部'

select * from GridViewDemoTable
--------------------编程问答--------------------

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    姓名:<asp:TextBox ID="txtName" runat="server"></asp:TextBox>部门:<asp:TextBox ID="txtDepartment" runat="server"></asp:TextBox>
    <asp:Button ID="btnAdd" runat="server" Text="新增" OnClick="btnAdd_Click" />    <asp:Button ID="btnSave" Text="保存" runat="server" OnClick="btnSave_Click" />
    <asp:GridView ID="gv" runat="server" AutoGenerateColumns="false" DataKeyNames="ID" OnRowDeleting="gv_RowDeleting" OnRowEditing="gv_RowEditing" OnRowUpdating="gv_RowUpdating" OnRowCancelingEdit="gv_RowCancelingEdit">
        <Columns>
        <asp:TemplateField HeaderText="姓名">
        <ItemTemplate>
        <%#Eval("Name") %>
        </ItemTemplate>        
        <EditItemTemplate>
        <asp:TextBox ID="txtName" runat="server" Text='<%#Eval("Name") %>'></asp:TextBox>
        </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="部门">
        <ItemTemplate>
        <%#Eval("Department") %>
        </ItemTemplate>        
        <EditItemTemplate>
        <asp:TextBox ID="txtDepartment" runat="server" Text='<%#Eval("Department") %>'></asp:TextBox>
        </EditItemTemplate>
        </asp:TemplateField>
            <asp:CommandField ShowDeleteButton="True" />
            <asp:CommandField ShowEditButton="True" />
        </Columns>
    </asp:GridView>
    
    </form>
</body>
</html>



protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
            DataTable dt = getDataTable();
            ViewState["dt"] = dt;
            gv.DataSource = dt;
            gv.DataBind();
        }
    }

    private DataTable getDataTable()
    {
        using (SqlConnection con = new SqlConnection("server=.;uid=xxx;pwd=xxx;database=Test"))
        {
            SqlDataAdapter sda = new SqlDataAdapter("select * from GridViewDemoTable ", con);
            DataSet ds = new DataSet();
            sda.Fill(ds, "GridViewDemoTable");
            if (ds.Tables.Contains("GridViewDemoTable"))
            {
                return ds.Tables["GridViewDemoTable"];                
            }
            return null;

        }//end using block    
    }

    protected void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        object val = gv.DataKeys[e.RowIndex].Value;
        DataTable dt = ViewState["dt"] as DataTable;
        if (dt != null)
        {
            for (int i = dt.Rows.Count - 1; i > -1; i--)
            {
                if (dt.Rows[i][0].Equals(val))
                {
                    dt.Rows[i].Delete();
                    //dt.Rows.RemoveAt(i);                    
                }
            }
            ViewState["dt"] = dt;
            gv.DataSource = dt;
            gv.DataBind();
            //Response.Write("<script language='JavaScript'>window.location=location;</script>");  //防止刷新重复提交

        }        
    }
    protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gv.EditIndex = e.NewEditIndex;
        DataTable dt = ViewState["dt"] as DataTable;
        if (dt != null)
        {
            gv.DataSource = dt;
            gv.DataBind();
        }        
    }

    protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        int iRowIndex = e.RowIndex;

        DataTable dt = ViewState["dt"] as DataTable;
        if (dt != null)
        {
            dt.Rows[iRowIndex]["Name"] = ((sender as GridView).Rows[iRowIndex].FindControl("txtName") as TextBox).Text;
            dt.Rows[iRowIndex]["Department"] = ((sender as GridView).Rows[iRowIndex].FindControl("txtDepartment") as TextBox).Text;

            ViewState["dt"] = dt;
            (sender as GridView).EditIndex = -1;
            gv.DataSource = dt;
            gv.DataBind();
        }                           

    }
    protected void gv_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        
        gv.EditIndex = -1;
        DataTable dt = ViewState["dt"] as DataTable;
        if (dt != null)
        {
            gv.DataSource = dt;
            gv.DataBind();
        }    
    }
    protected void btnAdd_Click(object sender, EventArgs e)
    {
        DataTable dt = ViewState["dt"] as DataTable;
        if (dt != null)
        {            
            using (SqlConnection con = new SqlConnection("server=.;uid=xxx;pwd=xxx;database=Test"))
            {
                SqlDataAdapter sda = new SqlDataAdapter("select MAX(ID)+1 from GridViewDemoTable ", con);
                DataSet ds = new DataSet();
                sda.Fill(ds, "MaxID");
                if (ds.Tables.Contains("MaxID") && ds.Tables["MaxID"].Rows.Count > 0)
                {
                    DataRow dr = dt.NewRow();
                    dr[0] = ds.Tables["MaxID"].Rows[0][0];
                    dr[1] = txtName.Text;
                    dr[2] = txtDepartment.Text;
                    dt.Rows.Add(dr);
                    ViewState["dt"] = dt;
                    gv.DataSource = dt;
                    gv.DataBind();
                }                
            }//end using block                
        }
    }
    protected void btnSave_Click(object sender, EventArgs e)
    {
        DataTable dt = ViewState["dt"] as DataTable;
        if (dt != null)
        {
            using (SqlConnection con = new SqlConnection("server=.;uid=xxx;pwd=xxx;database=Test"))
            {
                SqlDataAdapter sda = new SqlDataAdapter("select * from GridViewDemoTable ", con);
                SqlCommandBuilder scb = new SqlCommandBuilder(sda);
                DataSet ds = new DataSet();
                sda.Fill(ds, "GridViewDemoTable");                                
                sda.Update(dt);
                ClientScript.RegisterStartupScript(GetType(), "success", "alert('保存成功!');", true);
            }//end using block                
        }
    }
--------------------编程问答--------------------
引用 7 楼 sandy945 的回复:
HTML code<htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title>无标题页</title></head><body><formid="form1" runat="server">
    姓名:<asp:TextBoxID="txtName" runat="server"></asp:TextBox>部门:<asp:TextBoxID="txtDepartment" runat="server"></asp:TextBox><asp:ButtonID="btnAdd" runat="server" Text="新增" OnClick="btnAdd_Click"/>    <asp:ButtonID="btnSave" Text="保存" runat="server" OnClick="btnSave_Click"/><asp:GridViewID="gv" runat="server" AutoGenerateColumns="false" DataKeyNames="ID" OnRowDeleting="gv_RowDeleting" OnRowEditing="gv_RowEditing" OnRowUpdating="gv_RowUpdating" OnRowCancelingEdit="gv_RowCancelingEdit"><Columns><asp:TemplateFieldHeaderText="姓名"><ItemTemplate><%#Eval("Name")%></ItemTemplate><EditItemTemplate><asp:TextBoxID="txtName" runat="server" Text='<%#Eval("Name")%>'></asp:TextBox></EditItemTemplate></asp:TemplateField><asp:TemplateFieldHeaderText="部门"><ItemTemplate><%#Eval("Department")%></ItemTemplate><EditItemTemplate><asp:TextBoxID="txtDepartment" runat="server" Text='<%#Eval("Department")%>'></asp:TextBox></EditItemTemplate></asp:TemplateField><asp:CommandFieldShowDeleteButton="True"/><asp:CommandFieldShowEditButton="True"/></Columns></asp:GridView></form></body></html>
C# codeprotectedvoid Page_Load(object sender, EventArgs e)
    {if (!IsPostBack)
        {
            DataTable dt= getDataTable();
            ViewState["dt"]= dt;
            gv.DataSource= dt;
            gv.DataBind();
        }
    }private DataTable getDataTable()
    {using (SqlConnection con=new SqlConnection("server=.;uid=xxx;pwd=xxx;database=Test"))
        {
            SqlDataAdapter sda=new SqlDataAdapter("select * from GridViewDemoTable", con);
            DataSet ds=new DataSet();
            sda.Fill(ds,"GridViewDemoTable");if (ds.Tables.Contains("GridViewDemoTable"))
            {return ds.Tables["GridViewDemoTable"];                
            }returnnull;

        }//end using block    }protectedvoid gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {object val= gv.DataKeys[e.RowIndex].Value;
        DataTable dt= ViewState["dt"]as DataTable;if (dt!=null)
        {for (int i= dt.Rows.Count-1; i>-1; i--)
            {if (dt.Rows[i][0].Equals(val))
                {
                    dt.Rows[i].Delete();//dt.Rows.RemoveAt(i);                }
            }
            ViewState["dt"]= dt;
            gv.DataSource= dt;
            gv.DataBind();//Response.Write("<script language='JavaScript'>window.location=location;</script>");//防止刷新重复提交
        }        
    }protectedvoid gv_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gv.EditIndex= e.NewEditIndex;
        DataTable dt= ViewState["dt"]as DataTable;if (dt!=null)
        {
            gv.DataSource= dt;
            gv.DataBind();
        }        
    }protectedvoid gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {int iRowIndex= e.RowIndex;

        DataTable dt= ViewState["dt"]as DataTable;if (dt!=null)
        {
            dt.Rows[iRowIndex]["Name"]= ((senderas GridView).Rows[iRowIndex].FindControl("txtName")as TextBox).Text;
            dt.Rows[iRowIndex]["Department"]= ((senderas GridView).Rows[iRowIndex].FindControl("txtDepartment")as TextBox).Text;

            ViewState["dt"]= dt;
            (senderas GridView).EditIndex=-1;
            gv.DataSource= dt;
            gv.DataBind();
        }                           

    }protectedvoid gv_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        
        gv.EditIndex=-1;
        DataTable dt= ViewState["dt"]as DataTable;if (dt!=null)
        {
            gv.DataSource= dt;
            gv.DataBind();
        }    
    }protectedvoid btnAdd_Click(object sender, EventArgs e)
    {
        DataTable dt= ViewState["dt"]as DataTable;if (dt!=null)
        {using (SqlConnection con=new SqlConnection("server=.;uid=xxx;pwd=xxx;database=Test"))
            {
                SqlDataAdapter sda=new SqlDataAdapter("select MAX(ID)+1 from GridViewDemoTable", con);
                DataSet ds=new DataSet();
                sda.Fill(ds,"MaxID");if (ds.Tables.Contains("MaxID")&& ds.Tables["MaxID"].Rows.Count>0)
                {
                    DataRow dr= dt.NewRow();
                    dr[0]= ds.Tables["MaxID"].Rows[0][0];
                    dr[1]= txtName.Text;
                    dr[2]= txtDepartment.Text;
                    dt.Rows.Add(dr);
                    ViewState["dt"]= dt;
                    gv.DataSource= dt;
                    gv.DataBind();
                }                
            }//end using block        }
    }protectedvoid btnSave_Click(object sender, EventArgs e)
    {
        DataTable dt= ViewState["dt"]as DataTable;if (dt!=null)
        {using (SqlConnection con=new SqlConnection("server=.;uid=xxx;pwd=xxx;database=Test"))
            {
                SqlDataAdapter sda=new SqlDataAdapter("select * from GridViewDemoTable", con);
                SqlCommandBuilder scb=new SqlCommandBuilder(sda);
                DataSet ds=new DataSet();
                sda.Fill(ds,"GridViewDemoTable");                                
                sda.Update(dt);
                ClientScript.RegisterStartupScript(GetType(),"success","alert('保存成功!');",true);
            }//end using block        }
    }

星级用户就是不同 --------------------编程问答--------------------   1.首先用一个GetList()方法获取到所有的数据集绑定给gridview
  如:
   在 page_load事件中绑定数据
   gridview1.DataSource = BLL.GetList();
   gridview1.DataBind();
  
   2.点击添加按钮的时候获取text数据,通过session保存下来,在给datase,在重新绑定。
    string text1 =  txt1.Text.Trim();

    DataTable  mdt = new DataTable();
    ["mdt"] = null;
    mdt.Columns.Add("text1", typeof(Int32));
    Session["mdt"] = mdt;  

    DataTable dt = (DataTable)Session["mdt"];
    DataSet ds = new DataSet();
    ds.Merge(dt);

   gridview1.DataSource = ds;
   gridview1.DataBind();

   3.保存按钮..这一步应该就没什么写的了... --------------------编程问答-------------------- --------------------编程问答--------------------
引用 10 楼 fgmis 的回复:
参考GridView控件总攻略

楼上的老大啊,你的几个字我都看过n编了。。。
--------------------编程问答-------------------- 将数据放在一个临时的DataTable中,页面的所有操作体现到DataTable中,点击保存时根据当前的DataTable去更新数据库即可。 --------------------编程问答-------------------- DataTable的每一行是有状态可以明显加以区别。 --------------------编程问答-------------------- 简单~~你先把数据写入到xml文件中,gridview绑定xml,添加就在xml中添加。保存再添加到数据库 --------------------编程问答-------------------- 可以临时存到DataSet里面,点保存时在插入数据到DB!
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,