GridView的批量更新

lee8790 2006-12-19 03:49:55
我现在把GridView和DataTable绑定在一起,现在想将GridView的修改放到DataTable中,然后用DataAdapter.fill(DataTable)更新进数据库,请问这个如何实现
...全文
571 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lee8790 2006-12-20
  • 打赏
  • 举报
回复
呵呵.看了你的代码,问题解决了
ChengKing 2006-12-19
  • 打赏
  • 举报
回复
请参考: 用SqlCommandBuilder 实现批量更新:
http://blog.csdn.net/chengking/archive/2005/08/26/465874.aspx
零点逸族 2006-12-19
  • 打赏
  • 举报
回复
其实我现在想知道的是GridView修改后的值在DataTable中不存在,有没有办法让GirdView修改后的值存到DataTable中去

回答:这个过程应该要自己完成吧。把更页面上的更新写到DataTable后就好实现了
ydfqing 2006-12-19
  • 打赏
  • 举报
回复
不错呀,做个记号,留着慢慢看
Eddie005 2006-12-19
  • 打赏
  • 举报
回复
不好意思~~~ 上面贴错了另一个页面的代码~~

更正:

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();
}
}
Eddie005 2006-12-19
  • 打赏
  • 举报
回复
///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);
}
}
Eddie005 2006-12-19
  • 打赏
  • 举报
回复
<%@ 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>
lee8790 2006-12-19
  • 打赏
  • 举报
回复
顶啊
lee8790 2006-12-19
  • 打赏
  • 举报
回复
其实我现在想知道的是GridView修改后的值在DataTable中不存在,有没有办法让GirdView修改后的值存到DataTable中去
blueskygenius 2006-12-19
  • 打赏
  • 举报
回复
学习中......
孟子E章 2006-12-19
  • 打赏
  • 举报
回复
思路类似,只是先存到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

62,054

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧