摘自:http://topic.csdn.net/t/20061219/15/5241441.html
<%@ 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>
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();
}
}