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 StudyDotNet.DataGrid { /// <summary> /// SaveMoreState 的摘要说明。 /// </summary> public class SaveMoreState : System.Web.UI.Page { #region 控件申明 protected System.Web.UI.WebControls.DropDownList DropDownList1; protected System.Web.UI.WebControls.TextBox txbName; protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.WebControls.Button Button2; protected System.Web.UI.WebControls.DataGrid DataGrid2; protected System.Web.UI.WebControls.DataGrid DataGrid1; #endregion
<Columns>
<asp:BoundColumn DataField="id" ReadOnly="True"></asp:BoundColumn>
<asp:TemplateColumn>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Context") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="drop1" Runat="server" AutoPostBack="True" DataValueField="ID" DataTextField="Context"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="职务">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"ParentID")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="TextBox1" Runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"ParentID")%>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox ID="TextBox2" Runat="server" Enabled="False"></asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox id="CheckBox1" Runat="server" OnCheckedChanged="DataGrid_ChkChange" AutoPostBack="True"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>
此例子,另外还有两种保存状态的方法。
以前我贴出过一次。
这里在贴一次:完整代码如下。
Html代码。
<%@ Page language="c#" Codebehind="SaveMoreState.aspx.cs" AutoEventWireup="false" Inherits="StudyDotNet.DataGrid.SaveMoreState" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>SaveMoreState</title>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<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 MS_POSITIONING="GridLayout">
<center><font color="red"><b>DataGrid 翻页保存与还原状态</b></font></center>
<form id="Form1" method="post" runat="server">
<!--/******** DataGrid1 ********/--><br>
<font color="red"><b>翻页可以记录每次的更改操作[用于一次性提交]</b></font>
<asp:datagrid id="DataGrid1" runat="server" PageSize="3" AllowPaging="True" AutoGenerateColumns="False"
PagerStyle-Mode="NumericPages" DataKeyField="ID">
<Columns>
<asp:BoundColumn DataField="ID" ReadOnly="True" HeaderText="编号"></asp:BoundColumn>
<asp:BoundColumn DataField="Name" ReadOnly="True" HeaderText="姓名"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="性别">
<ItemTemplate>
<asp:DropDownList id="ddlSex" runat="server">
<asp:ListItem Value="0">男</asp:ListItem>
<asp:ListItem Value="1">女</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="年龄">
<ItemTemplate>
<asp:TextBox ID="txbAge" BorderStyle="Groove" Text='<%# DataBinder.Eval(Container.DataItem, "Age") %>' Runat="server">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>
<!--/******** DataGrid1完 ********/--><br>
<br>
<!--/******** DataGrid2 ********/-->
<font color="red"><b>在编辑模式下显示下拉清单</b></font>
<asp:DataGrid id="DataGrid2" DataKeyField="ID" runat="server" PagerStyle-Mode="NumericPages" AutoGenerateColumns="False"
AllowPaging="True" PageSize="3">
<Columns>
<asp:BoundColumn DataField="ID" ReadOnly="True" HeaderText="编号"></asp:BoundColumn>
<asp:BoundColumn DataField="Name" ReadOnly="True" HeaderText="姓名"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="性别">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Sex") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="ddlSex2" DataSource ="<%# ddlSex() %>" DataMember="Name" DataTextField="SexName" DataValueField="SexValue" runat="server">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="年龄">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Age") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="Textbox1" BorderStyle="Groove" Text='<%# DataBinder.Eval(Container.DataItem, "Age") %>' Runat="server">
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:ButtonColumn Text="编辑" ButtonType="PushButton" HeaderText="操作" CommandName="Edit"></asp:ButtonColumn>
</Columns>
<PagerStyle Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
<!--/******** DataGrid2完 ********/--></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;namespace StudyDotNet.DataGrid
{
/// <summary>
/// SaveMoreState 的摘要说明。
/// </summary>
public class SaveMoreState : System.Web.UI.Page
{
#region 控件申明
protected System.Web.UI.WebControls.DropDownList DropDownList1;
protected System.Web.UI.WebControls.TextBox txbName;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.DataGrid DataGrid2;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
#endregion
#region Page_Load
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
BindData();
BindData2();
}
} #endregion #region 数据绑定
private void BindData()
{
DataGrid1.DataSource =CreateDataSource();
DataGrid1.DataBind();
} private void BindData2()
{
DataGrid2.DataSource =CreateDataSource();
DataGrid2.DataBind();
} private DataTable CreateDataSource()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Columns.Add("Sex");
dt.Columns.Add("Age");
dt.Rows.Add(new object[] {"1","顺治","男","45"});
dt.Rows.Add(new object[] {"2","康熙","男","7"});
dt.Rows.Add(new object[] {"3","雍正","男","62"});
dt.Rows.Add(new object[] {"4","乾隆","男","18"});
dt.Rows.Add(new object[] {"5","朱元璋","男","32"});
dt.Rows.Add(new object[] {"6","赵框印","男","43"});
dt.Rows.Add(new object[] {"7","李世民","男","47"});
dt.Rows.Add(new object[] {"8","武则天","女","22"});
dt.Rows.Add(new object[] {"9","李旦","男","34"});
return dt;
} public DataTable ddlSex()
{
DataTable dt = new DataTable();
dt.Columns.Add("SexName");
dt.Columns.Add("SexValue");
dt.Rows.Add(new object[] {"男","1"});
dt.Rows.Add(new object[] {"女","0"});
return dt;
}
#endregion #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.DataGrid2.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid2_PageIndexChanged);
this.DataGrid2.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid2_EditCommand);
this.DataGrid2.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid2_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion #region DataGrid1 事件
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
GetValue("VsName","txbAge",3);
GetddlValue("VsddlName","ddlSex",2);
DataGrid1.CurrentPageIndex = e.NewPageIndex;
BindData();
SetValue("VsName","txbAge",3);
SetddlValue("VsddlName","ddlSex",2);
} private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataRowView drv = (DataRowView) e.Item.DataItem;
String strSex = drv["Sex"].ToString();
DropDownList ddl = (DropDownList) e.Item.FindControl("ddlSex");
ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByText(strSex));
}
}
#endregion #region DataGrid1 获取文本框函数
/// <summary>
/// 从DataGrid中读取文本框数据
/// 注意:
/// 只用于TextBox控件
/// 要求DataGrid有关键字
/// 读取数据的和还原数据的参数是一致的
/// </summary>
/// <param name="ViewStateName">VieState的名字</param>
/// <param name="TextBoxID">要存取TextBox控件的ID</param>
/// <param name="iRow">TextBox在DataGrid中的列系数[从0开始算]</param>
private void GetValue(string ViewStateName,string TextBoxID,int iRow)
{
//取原Hashtable的值。
Hashtable saveValue = new Hashtable();
if(ViewState[ViewStateName] != null)
{
saveValue = (Hashtable)ViewState[ViewStateName];
} string strKey,strValue;
TextBox txb1 = new TextBox();
foreach(DataGridItem item in DataGrid1.Items)
{
strKey = DataGrid1.DataKeys[item.ItemIndex].ToString();
txb1=(TextBox)item.Cells[iRow].FindControl(TextBoxID); //有则更新,无则新增
if(saveValue.ContainsKey(strKey))
{
strValue = txb1.Text.Trim();
saveValue[strKey] = strValue;
}
else
{
strValue = txb1.Text.Trim();
saveValue.Add(strKey,strValue);
}
}
ViewState[ViewStateName] = saveValue;
} /// <summary>
/// 从DataGrid中读取文本框数据
/// 注意:
/// 只用于TextBox控件
/// 要求DataGrid有关键字
/// 读取数据的和还原数据的参数是一致的
/// </summary>
/// <param name="ViewStateName">VieState的名字</param>
/// <param name="TextBoxID">要存取TextBox控件的ID</param>
/// <param name="iRow">TextBox在DataGrid中的列系数[从0开始算]</param>
private void SetValue(string ViewStateName,string TextBoxID,int iRow)
{
//取原Hashtable的值。
Hashtable saveValue = new Hashtable();
if(ViewState[ViewStateName] != null)
{
saveValue = (Hashtable)ViewState[ViewStateName];
}
if (saveValue == null) return;
string strKey,strValue;
TextBox txb1 = new TextBox();
foreach(DataGridItem item in DataGrid1.Items)
{
strKey = DataGrid1.DataKeys[item.ItemIndex].ToString();
txb1 = (TextBox)item.Cells[iRow].FindControl(TextBoxID);
//有则还原
if(saveValue.ContainsKey(strKey))
{
strValue =saveValue[strKey].ToString();
txb1.Text = strValue;
}
}
}
#endregion
/// <summary>
/// 从DataGrid中读取下拉框数据
/// 注意:
/// 只用于DropDownList控件
/// 要求DataGrid有关键字
/// 读取数据的和还原数据的参数是一致的
/// </summary>
/// <param name="ViewStateName">VieState的名字</param>
/// <param name="DropDownListID">要存取DropDownList控件的ID</param>
/// <param name="iRow">DropDownList在DataGrid中的列系数[从0开始算]</param>
private void GetddlValue(string ViewStateName,string DropDownListID,int iRow)
{
//取原Hashtable的值。
Hashtable saveValue = new Hashtable();
if(ViewState[ViewStateName] != null)
{
saveValue = (Hashtable)ViewState[ViewStateName];
} string strKey,strValue;
DropDownList ddl1 = new DropDownList();
foreach(DataGridItem item in DataGrid1.Items)
{
strKey = DataGrid1.DataKeys[item.ItemIndex].ToString();
ddl1=(DropDownList)item.Cells[iRow].FindControl(DropDownListID); //有则更新,无则新增
if(saveValue.ContainsKey(strKey))
{
strValue = ddl1.SelectedItem.Text.Trim();
saveValue[strKey] = strValue;
}
else
{
strValue = ddl1.SelectedItem.Text.Trim();
saveValue.Add(strKey,strValue);
}
}
ViewState[ViewStateName] = saveValue;
} /// <summary>
/// 从DataGrid中读取下拉框数据
/// 注意:
/// 只用于DropDownList控件
/// 要求DataGrid有关键字
/// 读取数据的和还原数据的参数是一致的
/// </summary>
/// <param name="ViewStateName">VieState的名字</param>
/// <param name="DropDownListID">要存取DropDownList控件的ID</param>
/// <param name="iRow">DropDownList在DataGrid中的列系数[从0开始算]</param>
private void SetddlValue(string ViewStateName,string DropDownListID,int iRow)
{
//取原Hashtable的值。
Hashtable saveValue = new Hashtable();
if(ViewState[ViewStateName] != null)
{
saveValue = (Hashtable)ViewState[ViewStateName];
}
if (saveValue == null) return;
string strKey,strValue;
DropDownList ddl1 = new DropDownList();
foreach(DataGridItem item in DataGrid1.Items)
{
strKey = DataGrid1.DataKeys[item.ItemIndex].ToString();
ddl1=(DropDownList)item.Cells[iRow].FindControl(DropDownListID);
//有则还原
if(saveValue.ContainsKey(strKey))
{
strValue =saveValue[strKey].ToString();
ddl1.SelectedIndex =-1;
ddl1.Items.FindByText(strValue).Selected =true;
}
}
}
#endregion #region DataGrid2 事件
private void DataGrid2_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid2.CurrentPageIndex =e.NewPageIndex;
BindData2();
}
private void DataGrid2_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid2.EditItemIndex =e.Item.ItemIndex;
BindData2();
}
private void DataGrid2_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.EditItem)
{
DataRowView drv = (DataRowView) e.Item.DataItem;
String strSex = drv["Sex"].ToString();
DropDownList ddl = (DropDownList) e.Item.FindControl("ddlSex2");
ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByText(strSex));
}
}
#endregion
}
}