请问各位大虾有哪些方法可以实现页面的多行编辑? 请问各位大虾有哪些方法可以实现页面的多行编辑? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <%@ Page language="c#" Codebehind="多行录入提交.aspx.cs" AutoEventWireup="false" Inherits="bsTest2005_8_16.Samples.多行录入提交" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML> <HEAD> <title>多行录入提交</title> <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 32px; POSITION: absolute; TOP: 32px" runat="server" AutoGenerateColumns="False"> <Columns> <asp:TemplateColumn HeaderText="id"> <ItemTemplate> <%# " --"+DataBinder.Eval(Container.DataItem,"id") %> </ItemTemplate> <EditItemTemplate> <asp:DropDownList id="DropDownList1" runat="server"> <asp:ListItem Value="AAA">AAA</asp:ListItem> <asp:ListItem Value="BBB">BBB</asp:ListItem> <asp:ListItem Value="CCC">CCC</asp:ListItem> </asp:DropDownList> </EditItemTemplate> </asp:TemplateColumn> <asp:BoundColumn DataField="name" HeaderText="姓名"></asp:BoundColumn> </Columns> </asp:DataGrid> <asp:Button id="btnAddNew" style="Z-INDEX: 102; LEFT: 560px; POSITION: absolute; TOP: 64px" runat="server" Text="AddNew"></asp:Button> <asp:Button id="btnSave" style="Z-INDEX: 103; LEFT: 560px; POSITION: absolute; TOP: 104px" runat="server" Text="Submit"></asp:Button> </form> </body></HTML>**************************************************using System;using System.Data;using System.Web.UI.WebControls;namespace bsTest2005_8_16.Samples{ /// <summary> /// 多行录入提交 的摘要说明。 /// </summary> public class 多行录入提交 : System.Web.UI.Page { protected System.Web.UI.WebControls.Button btnAddNew; protected System.Web.UI.WebControls.Button btnSave; protected System.Web.UI.WebControls.DataGrid DataGrid1; /// <summary> /// 属性:当前编辑中的数据集 /// </summary> private DataTable CurrentData { get { return (ViewState["_CurrentData"]==null)?CreateTable():(DataTable)ViewState["_CurrentData"]; } set { ViewState["_CurrentData"] = value; } } private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 if(!IsPostBack) { this.DataGrid1.DataSource = this.CurrentData; this.DataGrid1.DataBind(); } } private DataTable CreateTable() { DataTable dt = new DataTable(); dt.Columns.Add("id"); dt.Columns.Add("name"); dt.AcceptChanges(); return dt; } private void CollectDataFromGrid() { DataTable dt = this.CurrentData; if(dt.Rows.Count>0) { DropDownList ddlst = this.DataGrid1.Items[DataGrid1.EditItemIndex].Cells[0].FindControl("DropDownList1") as DropDownList; dt.Rows[dt.Rows.Count-1]["id"] = ddlst.SelectedValue; dt.Rows[dt.Rows.Count-1]["name"] = ((TextBox)this.DataGrid1.Items[DataGrid1.EditItemIndex].Cells[1].Controls[0]).Text; } this.CurrentData = dt; } private void btnAddNew_Click(object sender, System.EventArgs e) { CollectDataFromGrid();//收集之前一行的输入 //增加一个新的空行 DataTable dt = this.CurrentData; DataRow r = dt.NewRow(); dt.Rows.Add(r); //当前编辑行定位到新行 this.DataGrid1.EditItemIndex = dt.Rows.Count-1; this.DataGrid1.DataSource = dt; this.DataGrid1.DataBind(); } private void btnSave_Click(object sender, System.EventArgs e) { DataTable dt = this.CurrentData;//取得最终录入的多行数据 //保存到数据库,实现方法一般有两种,要么是DataAdapter.Update方法,要么是自己写SQL语句 } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.btnAddNew.Click += new System.EventHandler(this.btnAddNew_Click); this.btnSave.Click += new System.EventHandler(this.btnSave_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion }} 搞错了,不好意思。我的意思是在一个页面中编辑多条记录后存盘,而不是像DataGrid那样编辑一行存一次盘 LZ的意思是不是这样:必然说一个订单哈,明细里面有很多条记录,编辑好了,保存,这个定单就生成了,以前在CS程序中 就这样弄得,但是现在是BS,不行了,----------------------只有用JavaScript了!!或者在一个DataGrid中用很莫版列,里面放TextBox 用javascript实现动态增加DataGrid行 http://xuzq.cnblogs.com/archive/2006/04/26/385625.html 这样试试,把页面每个输入框的值都存入一个数组,比如: ID Name行一值: 1 物品1(这里的TextBoxID为txtProduct1) 行二值: 2 物品2(这里的TextBoxID为txtProduct2)上面的Name项,txtProduct的ID是随着第几行,就是txtProduct多少然后存入数组如:ID|Name 那么可以 1|物品1||2|物品2然后用循环取得数组的值再取物品时,可以先用 ||分隔,取出 1|物品1 与 2|物品2然后再用|分隔,分别取出1 物品1以及2物品2,存入数据库 http://msdn.microsoft.com/library/en-us/dv_vstechart/html/vbtchTopQuestionsAboutASPNETDataGridServerControl.asp?frame=true 用XmlSerializer序列化为文件后,怎样插入XSL引用头? 【谈下三种存随机题目的优缺点】 怎样做asp.net的选择属性 gridview行单击之后判断用户是否已经登录 大哥大姐来帮忙 请教:给DATALIST做个分页的通用类.CS遇到的问题 急急急,label无法显示较多文字,我该怎么办 DataBind()比较深的问题 新接语音查询相关的项目,请各位前来讨论方案 vs2010 中调用rdlc做web报表,发布后没有打印按钮 如何遍历文件夹内的图片文件,并改名? 简单的问题.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>多行录入提交</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 32px; POSITION: absolute; TOP: 32px" runat="server"
AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn HeaderText="id">
<ItemTemplate>
<%# " --"+DataBinder.Eval(Container.DataItem,"id") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="DropDownList1" runat="server">
<asp:ListItem Value="AAA">AAA</asp:ListItem>
<asp:ListItem Value="BBB">BBB</asp:ListItem>
<asp:ListItem Value="CCC">CCC</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="name" HeaderText="姓名"></asp:BoundColumn>
</Columns>
</asp:DataGrid>
<asp:Button id="btnAddNew" style="Z-INDEX: 102; LEFT: 560px; POSITION: absolute; TOP: 64px"
runat="server" Text="AddNew"></asp:Button>
<asp:Button id="btnSave" style="Z-INDEX: 103; LEFT: 560px; POSITION: absolute; TOP: 104px" runat="server"
Text="Submit"></asp:Button>
</form>
</body>
</HTML>
**************************************************
using System;
using System.Data;
using System.Web.UI.WebControls;namespace bsTest2005_8_16.Samples
{
/// <summary>
/// 多行录入提交 的摘要说明。
/// </summary>
public class 多行录入提交 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button btnAddNew;
protected System.Web.UI.WebControls.Button btnSave;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
/// <summary>
/// 属性:当前编辑中的数据集
/// </summary>
private DataTable CurrentData
{
get
{
return (ViewState["_CurrentData"]==null)?CreateTable():(DataTable)ViewState["_CurrentData"];
}
set
{
ViewState["_CurrentData"] = value;
}
} private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
this.DataGrid1.DataSource = this.CurrentData;
this.DataGrid1.DataBind();
}
} private DataTable CreateTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.AcceptChanges();
return dt;
} private void CollectDataFromGrid()
{
DataTable dt = this.CurrentData;
if(dt.Rows.Count>0)
{
DropDownList ddlst = this.DataGrid1.Items[DataGrid1.EditItemIndex].Cells[0].FindControl("DropDownList1") as DropDownList;
dt.Rows[dt.Rows.Count-1]["id"] = ddlst.SelectedValue;
dt.Rows[dt.Rows.Count-1]["name"] = ((TextBox)this.DataGrid1.Items[DataGrid1.EditItemIndex].Cells[1].Controls[0]).Text;
}
this.CurrentData = dt;
}
private void btnAddNew_Click(object sender, System.EventArgs e)
{
CollectDataFromGrid();//收集之前一行的输入 //增加一个新的空行
DataTable dt = this.CurrentData;
DataRow r = dt.NewRow();
dt.Rows.Add(r);
//当前编辑行定位到新行
this.DataGrid1.EditItemIndex = dt.Rows.Count-1;
this.DataGrid1.DataSource = dt;
this.DataGrid1.DataBind();
} private void btnSave_Click(object sender, System.EventArgs e)
{
DataTable dt = this.CurrentData;//取得最终录入的多行数据
//保存到数据库,实现方法一般有两种,要么是DataAdapter.Update方法,要么是自己写SQL语句
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnAddNew.Click += new System.EventHandler(this.btnAddNew_Click);
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}
我的意思是在一个页面中编辑多条记录后存盘,而不是像DataGrid那样编辑一行存一次盘
必然说一个订单哈,明细里面有很多条记录,编辑好了,保存,这个定单就生成了,
以前在CS程序中 就这样弄得,但是现在是BS,不行了,----------------------只有用JavaScript了!!或者在一个DataGrid中用很莫版列,里面放TextBox
http://xuzq.cnblogs.com/archive/2006/04/26/385625.html
比如:
ID Name
行一值: 1 物品1(这里的TextBoxID为txtProduct1)
行二值: 2 物品2(这里的TextBoxID为txtProduct2)上面的Name项,txtProduct的ID是随着第几行,就是txtProduct多少然后存入数组如:ID|Name 那么可以 1|物品1||2|物品2然后用循环取得数组的值
再取物品时,可以先用 ||分隔,取出 1|物品1 与 2|物品2
然后再用|分隔,分别取出1 物品1以及2物品2,存入数据库