datagrid在page_load 里时候,实现有三行,每行的列里都显示文本框,单击button的时候增加新行?
就是说单击botton一下,变为四行,前三行输入的内容不丢失,再单击一下,变为五行,等等!??
就是说单击botton一下,变为四行,前三行输入的内容不丢失,再单击一下,变为五行,等等!??
解决方案 »
- <add assembly="DevExpress.Web.ASPxHtmlEditor.v9.1, Version=9.1.5.0, Culture=neut
- 如何在ASP.NET中实现类似Excel表格合并拆分的功能?
- app.config问题!求助!!
- 如何把byte[]数组转换为Excel加载到内存中并操作?
- Response.Redirect的问题.救急啊...
- 如何取得一个Class内部取得自己所在的名称空间及自己的类名?请指教!
- 请教各位大师:关于在已划分页面中使用HyperLink的问题
- 面试中委托的问题!!!
- 上传文件的功能
- datagrid的绑定表达式怎么写,每次我都是在程序里面绑定的?谢谢
- petshop 4中为什么不用存储过程
- button1.Attributes.Add("onclick","return confirm('已完成修改,确定要打印单据吗?');");
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>DataGridMulUse</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body bgColor="#66cc99" MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<h2>DataGrid控件综合举例:</h2>
<TABLE id="Table1" style="WIDTH: 672px; HEIGHT: 265px" cellSpacing="1" cellPadding="1"
width="672" border="0">
<TR>
<TD align="center"><asp:validationsummary id="ValidationSummary1" runat="server" Height="40px" Width="496px"></asp:validationsummary></TD>
</TR>
<TR>
<TD><asp:datagrid id="dgEditInfo" runat="server" Height="20px" Width="672px" AutoGenerateColumns="False"
PageSize="5" AllowPaging="True">
<Columns>
<asp:TemplateColumn HeaderText="LastName">
<ItemTemplate>
<asp:TextBox id=LastName runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.LastName") %>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="ReportsTo">
<ItemTemplate>
<asp:TextBox id=Reports runat="server" Width="70px" Text='<%# DataBinder.Eval(Container, "DataItem.ReportsTo") %>'>
</asp:TextBox>
<asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server" ControlToValidate="Reports" ErrorMessage="请输入数字"
ValidationExpression="\d">!</asp:RegularExpressionValidator>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="FirstName">
<ItemTemplate>
<asp:TextBox id=FirstName runat="server" Width="164px" Text='<%# DataBinder.Eval(Container, "DataItem.FirstName") %>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="City">
<ItemTemplate>
<asp:TextBox id=City runat="server" Width="156px" Text='<%# DataBinder.Eval(Container, "DataItem.City") %>'>
</asp:TextBox>
</ItemTemplate>
<FooterStyle HorizontalAlign="Right"></FooterStyle>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="删除">
<ItemTemplate>
<asp:LinkButton id="DeleteRow" runat="server" CommandName="Delete">删除</asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle NextPageText="Next" PrevPageText="Previous" HorizontalAlign="Center" Mode="NumericPages"></PagerStyle>
</asp:datagrid></TD>
</TR>
<TR>
<TD align="right"><asp:linkbutton id="AddRow" runat="server">增加</asp:linkbutton><asp:textbox id="RowCount" runat="server" Width="30px">1</asp:textbox>行</TD>
</TR>
<TR>
<TD><FONT face="宋体"><asp:button id="btnSave" runat="server" Width="48px" Text="保存"></asp:button></FONT></TD>
</TR>
<TR>
<TD><FONT face="宋体"><asp:datagrid id="dgSaveInfo" runat="server"></asp:datagrid></FONT></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;
namespace CommonFunction
{
/// <summary>
/// DataGridMulUse 的摘要说明。
/// </summary>
public class DataGridMulUse : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox RowCount;
protected System.Web.UI.WebControls.LinkButton AddRow;
protected System.Web.UI.WebControls.DataGrid dgEditInfo;
protected System.Web.UI.WebControls.DataGrid dgSaveInfo;
protected System.Web.UI.WebControls.ValidationSummary ValidationSummary1;
protected System.Web.UI.WebControls.Button btnSave;
private DataSet dataSet = new DataSet();
private int lastEditedPage;
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
//进行数据绑定
DataGridDataBind();
}
}
public void ReverseBind()
{
//循环取得DataGrid控件中的项,并把每项的数据保存到DataSet中
foreach(DataGridItem gridrow in dgEditInfo.Items)
{
//建立DataSet中testTable表的新行
DataRow row = dataSet.Tables["testTable"].NewRow();
//针对绑定数据源的数据项索引建立数据行的索引
row = dataSet.Tables["testTable"].Rows[gridrow.DataSetIndex];
//取得当前行文本框中的数据值,添加到DataSet中testTable表
row["LastName"] = ((TextBox)(gridrow.FindControl("LastName"))).Text;
row["FirstName"] = ((TextBox)(gridrow.FindControl("FirstName"))).Text;
row["City"] = ((TextBox)(gridrow.FindControl("City"))).Text;
row["ReportsTo"] = Convert.ToInt32(((TextBox)(gridrow.FindControl("Reports"))).Text);
}
}
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState); //取得编辑前的DataSet的视图状态
if (ViewState["Data"]!= null)
{
dataSet = (DataSet)ViewState["Data"];
} if (ViewState["LastEditedPage"] != null)
{
//取得视图状态中保存的当前页的索引
lastEditedPage = Convert.ToInt32(ViewState["LastEditedPage"]);
} } protected override object SaveViewState()
{
//保存当前DataSet的视图状态
ViewState["Data"] = dataSet;
//保存当前页面索引的视图状态
ViewState["LastEditedPage"] = lastEditedPage;
return (base.SaveViewState());
}
//进行数据绑定
private void DataGridDataBind()
{
//定义数据连接对象,其中数据库连接字符串是在Web.Config文件中定义的
SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionSqlServer"].ToString());
//创建数据适配器对象
SqlDataAdapter da = new SqlDataAdapter("select top 3 LastName,FirstName,ReportsTo,City from Employees",conn);
try
{
//填充数据集
da.Fill(dataSet,"testTable");
//进行数据绑定
dgEditInfo.DataSource = dataSet.Tables["testTable"];
dgEditInfo.DataBind();
}
catch(Exception error)
{
Response.Write(error.ToString());
}
}
public void BindGrid()
{
//进行数据绑定
dgEditInfo.DataSource = dataSet.Tables["testTable"];
dgEditInfo.DataBind();
lastEditedPage = dgEditInfo.CurrentPageIndex;
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.dgEditInfo.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgEditInfo_ItemCommand);
this.dgEditInfo.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.dgEditInfo_PageIndexChanged);
this.AddRow.Click += new System.EventHandler(this.AddRow_Click);
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void AddRow_Click(object sender, System.EventArgs e)
{
//如果输入了添加的行数
if (RowCount.Text.Trim() != "")
{
try
{
int addRowCount = Convert.ToInt32(RowCount.Text);
for(int i = 0;i<addRowCount;i++)
{
//为当前绑定的数据表添加新行
DataRow row = dataSet.Tables["testTable"].NewRow();
row[0] = "";
row[1] = "";
row[2] = "0";
row[3] = "";
dataSet.Tables["testTable"].Rows.Add(row);
}
}
catch
{
Response.Write("请输入正确的要添加的行数");
}
}
//重新进行数据绑定
BindGrid();
} private void btnSave_Click(object sender, System.EventArgs e)
{
//取得当前DataGrid中的数据
ReverseBind();
dgSaveInfo.DataSource = dataSet.Tables["testTable"];
dgSaveInfo.DataBind();
} private void dgEditInfo_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if("Delete" == e.CommandName)
{
//移除当前绑定的数据表中的指定行
dataSet.Tables["testTable"].Rows.Remove(dataSet.Tables["testTable"].Rows[e.Item.DataSetIndex]);
//防止最后页删除唯一的一条记录时出现异常信息
if ((dgEditInfo.PageCount - dgEditInfo.CurrentPageIndex) == 1 && dgEditInfo.Items.Count == 1)
{
if (dgEditInfo.PageCount > 1)
{
lastEditedPage = lastEditedPage - 1;
}
else
{
lastEditedPage = 0;
}
}
dgEditInfo.CurrentPageIndex = lastEditedPage;
BindGrid();
}
} private void dgEditInfo_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
//设置DataGrid当前页的索引
dgEditInfo.CurrentPageIndex = e.NewPageIndex;
BindGrid();
}
}
}
先获得datagrid的ClientId,然后根据table的insertRow,Tr的insertCell,再就是innerHTML来动态增加,具体参考DHTML手册。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm7</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">
<FONT face="宋体">
<TABLE id="Table1" cellSpacing="1" cellPadding="1" width="300" border="0">
<TR>
<TD>
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button></TD>
</TR>
<TR>
<TD>
<asp:DataGrid id="DataGrid1" runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox id="TextBox1" text='<%#DataBinder.Eval(Container.DataItem, "field1")%>' runat="server">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid></TD>
</TR>
</TABLE>
</FONT>
</form>
</body>
</HTML>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace bsTest2005_8_16
{
/// <summary>
/// WebForm7 的摘要说明。
/// </summary>
public class WebForm7 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("Field1");
dt.Columns.Add("Field2");
dt.Rows.Add(new object[]{null,null});
dt.Rows.Add(new object[]{null,null});
dt.Rows.Add(new object[]{null,null});
ViewState["myDataTable"] = dt; BindData();
}
} private void BindData()
{
if( ViewState["myDataTable"]!=null)
{
DataTable dt = ViewState["myDataTable"] as DataTable;
this.DataGrid1.DataSource = dt;
this.DataGrid1.DataBind();
}
} private void getInput()
{
DataTable dt = ViewState["myDataTable"] as DataTable;
for(int i=0;i<this.DataGrid1.Items.Count;i++)
{
TextBox tb = this.DataGrid1.Items[i].Cells[0].FindControl("TextBox1") as TextBox;
dt.Rows[i]["field1"] = tb.Text;
}
dt.Rows.Add(new object[]{null,null});
dt.AcceptChanges();
ViewState["myDataTable"] = dt;
} private void Button1_Click(object sender, System.EventArgs e)
{
getInput();
BindData();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion }
}