我现在把GridView和DataTable绑定在一起,现在想将GridView的修改放到DataTable中,然后用DataAdapter.fill(DataTable)更新进数据库,请问这个如何实现

解决方案 »

  1.   

    思路类似,只是先存到DataTable即可
    http://dotnet.aspx.cc/article/a933b187-06c3-4263-9eec-414a54d9c815/read.aspx
    http://dotnet.aspx.cc/article/2cb1c6d7-2b22-4655-8922-2a8a053a66fa/read.aspx
      

  2.   

    其实我现在想知道的是GridView修改后的值在DataTable中不存在,有没有办法让GirdView修改后的值存到DataTable中去
      

  3.   

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridMuliEdit.aspx.cs" Inherits="CSDN_GridMuliEdit" %><!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>GridView多行编辑</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="添加空行" OnClick="Button1_Click" />
            <asp:Button ID="Button2" runat="server" Text="保存所有" OnClick="Button2_Click" />
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id" OnRowDeleting="GridView1_RowDeleting">
                <Columns>
                    <asp:TemplateField HeaderText="产品">
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "产品")%>'></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="数量"> <ItemTemplate>
                            <asp:TextBox ID="TextBox2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "数量")%>'></asp:TextBox>
                        </ItemTemplate></asp:TemplateField>
                    <asp:TemplateField HeaderText="日期"> <ItemTemplate>
                            <asp:TextBox ID="TextBox3" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "日期")%>'></asp:TextBox>
                        </ItemTemplate></asp:TemplateField>
                    <asp:TemplateField HeaderText="状态">
                        <ItemTemplate>
                            <asp:DropDownList ID="DropDownList1" runat="server"  SelectedValue='<%# DataBinder.Eval(Container.DataItem, "状态")%>'>
                                <asp:ListItem Value="1">有效</asp:ListItem>
                                <asp:ListItem Value="0">无效</asp:ListItem>
                            </asp:DropDownList>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:ButtonField CommandName="Delete" Text="删除" />
                </Columns>
            </asp:GridView>
        
        </div>
        </form>
    </body>
    </html>
      

  4.   

    ///C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ItemTemplatesCache\Web\CSharp\2052\WebForm.zip\CodeBeside.cs
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class CSDN_Default2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.BindTestData(null);            int rowIndex = 0;
                
                GridViewRow sortRow = new GridViewRow(rowIndex, rowIndex, DataControlRowType.DataRow, DataControlRowState.Normal);
    TableCell sortCell = new TableCell();
    sortCell.ColumnSpan = 4;
    sortCell.Text = string.Format("{0}{1}: {2}", "", "<img src='../images/close.gif' onclick=\"document.getElementById('Button1').click();\">" + "", "");
    sortCell.BackColor = System.Drawing.Color.Silver;
    sortRow.Cells.Add(sortCell);
    this.GridView1.Controls[0].Controls.AddAt(rowIndex, sortRow);
            }
        }    protected void BindTestData(string sort)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("field1");
            dt.Columns.Add("field2");
            dt.Columns.Add("field3");
            dt.Columns.Add("field4");
            dt.Columns[3].DataType = true.GetType();
            dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };        dt.Rows.Add(new object[] { 111, 111, "aaaa", true });
            dt.Rows.Add(new object[] { 222, 222, "bbbb", false });
            dt.Rows.Add(new object[] { 333, 333, "cccc", true });        Random rd = new Random();
            for (int i = 1; i < 10; i++)
            {
                dt.Rows.Add(new object[] { i, i * i, rd.Next(10000), true });
            }
            dt.AcceptChanges();
            DataView dv = dt.DefaultView;
            if(sort !=null)
                dv.Sort = sort;        this.GridView1.DataSource = dv;
            this.GridView1.DataBind();
        }
        protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {
            this.BindTestData(e.SortExpression);
        }    protected void Button1_ServerClick(object sender, EventArgs e)
        {
            Response.Write(DateTime.Now);
        }
    }
      

  5.   

    不好意思~~~  上面贴错了另一个页面的代码~~更正:using System;
    using System.Data;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;public partial class CSDN_GridMuliEdit : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindTestData();
            }
        }    protected void BindTestData()
        {
            //模拟出一些原始数据绑定DataGrid
            DataTable dt1 = new DataTable("Table1");
            dt1.Columns.Add("ID");
            dt1.Columns.Add("产品");
            dt1.Columns.Add("数量");
            dt1.Columns.Add("日期");
            dt1.Columns.Add("状态");        dt1.Rows.Add(new object[] { 123,"产品AA", 12, "2006-11-14", "1" });
            dt1.Rows.Add(new object[] { 124, "产品BB", 21, "2006-11-13", "0" });
            dt1.AcceptChanges();        this.GridView1.DataSource = dt1;
            this.GridView1.DataBind();
        }    protected DataTable GetDataFromGrid()
        {
            DataTable dt1 = new DataTable("Table1");
            dt1.Columns.Add("ID");
            dt1.Columns.Add("产品");
            dt1.Columns.Add("数量");
            dt1.Columns.Add("日期");
            dt1.Columns.Add("状态");
            for(int i =0;i<GridView1.Rows.Count;i++)
            {
                GridViewRow gRow = GridView1.Rows[i];
                DataRow newRow = dt1.NewRow();
                newRow[0] = GridView1.DataKeys[i].Value;
                newRow[1] = ((TextBox)gRow.FindControl("TextBox1")).Text;
                newRow[2] = ((TextBox)gRow.FindControl("TextBox2")).Text;
                newRow[3] = ((TextBox)gRow.FindControl("TextBox3")).Text;
                newRow[4] = ((DropDownList)gRow.FindControl("DropDownList1")).SelectedValue;
                dt1.Rows.Add(newRow);
            }
            dt1.AcceptChanges();
            return dt1;
        }    protected void Button1_Click(object sender, EventArgs e)
        {
            DataTable dt = this.GetDataFromGrid();
            DataRow newRow = dt.NewRow();
            newRow["状态"] = "1";
            dt.Rows.Add(newRow);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            DataTable dt = this.GetDataFromGrid();
            foreach (DataRow row in dt.Rows)
            {
                if (row["ID"] != null)
                {
                    //更新该行记录到数据库
                }
                else
                {
                    //插入该行记录到数据库
                }
            }        //到数据库删除 ViewState["DeletedID"]中记录的行
        }
        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            int deletedIndex = e.RowIndex;
            DataTable dt = this.GetDataFromGrid();        //如果删除的是数据库中原有的记录,则把关键字记录在ViewState
            if (dt.Rows[deletedIndex]["ID"] != null)
            {
                string deletedID = string.Empty;
                if (ViewState["DeletedID"] != null) deletedID = ViewState["DeletedID"].ToString();
                deletedID += "'" + dt.Rows[deletedIndex]["ID"].ToString() + "',";
                ViewState["DeletedID"] = deletedID;
            }
            
            dt.Rows[deletedIndex].Delete();
            dt.AcceptChanges();
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
    }
      

  6.   

    其实我现在想知道的是GridView修改后的值在DataTable中不存在,有没有办法让GirdView修改后的值存到DataTable中去回答:这个过程应该要自己完成吧。把更页面上的更新写到DataTable后就好实现了
      

  7.   

    请参考: 用SqlCommandBuilder 实现批量更新:
            http://blog.csdn.net/chengking/archive/2005/08/26/465874.aspx