本文介绍如何在A .NET中实现多页面选择的问题。其具体思路很简单:用隐藏的I UT记住每次选择的项目,在进行数据绑定时,检查保存的值,再在DataGrid中进行选中显示。下面时完整的代码和例子:
查看例子
SelectMultiPages.a x
<%@ Page EnableViewState="true" CodeBehind=" electMultiPages.a x.c quot; Language="c#"
AutoEventWireup="false" Inherits="eMeng.Exam.SelectMultiPage quot; %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Tra itional//E quot gt;
<HTML>
<HEAD>
<title>跨页面实现多选</title>
<META http-equiv="content-type" content="text/html; charset=gb2312" gt;
< tyle>
* {FONT-SIZE:12PX}
#Status {text-align:left}
</style>
< cript language="JAVASCRIPT" gt;
function AddRemoveValues(oChk) {
//在处理这个地方需要注意的是:你保存的值应该具有唯一性,这样才能不会替换错误的项。
if(oChk.checked)
SelectMultiPage.Hd electedValues.value += "," + oChk.value;
else
SelectMultiPage.Hd electedValues.value = SelectMultiPage.Hd electedValues.value.replace("," + oChk.value," quot;);
}
</script>
</HEAD>
< ODY>
<form id=" electMultiPage" runat=" erver" gt;
<a :datagrid id="DataGrid1" HorizontalAlign="Center" AutoGenerateColum ="False" Width="600px"
AllowPaging="True" runat=" erver" gt;
<AlternatingItemStyle BackColor="#EEEEEE" gt lt;/AlternatingItemStyle>
<HeaderStyle BackColor="#AAAADD" Font-Bold="True" HorizontalAlign="Center" gt lt;/HeaderStyle>
< agerStyle HorizontalAlign="Right" Mode=" umericPage quot; Visible="True" gt lt;/PagerStyle>
<Colum gt;
<a :TemplateColumn HeaderText="选择" gt;
<ItemTemplate>
<i ut type="checkbox" runat=" erver" id="chkSelect" onclick="AddRemoveValues(this)"
value='<%#DataBinder.Eval(Container.DataItem,"Title")%>'/>
</ItemTemplate>
</a :TemplateColum gt;
<a :TemplateColumn HeaderText="文章标题" gt;
<ItemTemplate>
<a :Literal Text='<%# DataBinder.Eval(Container.DataItem, "Title") %>' runat=" erver" ID="TitleShow"/>
</ItemTemplate>
</a :TemplateColum gt;
<a :TemplateColumn HeaderText="发布时间" gt;
<ItemTemplate>
<a :Literal Text='<%# DataBinder.Eval(Container.DataItem, "CreateDate").ToString() %>' runat=" erver"/>
</ItemTemplate>
</a :TemplateColum gt;
</Colum gt;
</a :datagrid>
<div align=center>
<a :button id=" utton1" runat=" erver" Text="得到所选的值" gt lt;/a :butto gt;
<div id=" tatu quot gt;
<a :label id="Label1" runat=" erver" gt lt;/a :label>
</div>
<I UT id="Hd electedValue quot; type="hidde quot; name="Hd electedValue quot; runat=" erver" gt;
</div>
</form>
</BODY>
</HTML>
SelectMultiPages.a x.cs
using System;
using System.Collectio
using System.ComponentModel;
using System.Data;
using System.Data.OleD
using System.Drawing;
using System.We
using System.Web.Se io tate;
using System.Web.UI;
using System.Web.UI.WebControl
using System.Web.UI.HtmlControl
name ace eMeng.Exam
{
/// < ummary>
/// SelectMultiPages 的摘要说明。
/// </summary>
public cla SelectMultiPages : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.HtmlControls.HtmlI utHidden Hd electedValue
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.I ostBack)
BindData();
}
private void DataGrid1_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex = e.NewPageIndex;
BindData();
}
void BindData()
{
OleDbCo ection cn = new OleDbCo ection(" rovider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ HttpContext.Current.Server.Ma ath("a x.md quot;));
OleDbDataAdapter da = new OleDbDataAdapter(" elect Title, CreateDate from Document",cn);
DataSet ds = new DataSet();
da.Fill(ds);
DataGrid1.DataSource= d
DataGrid1.DataBind();
}
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
//重新显示所选择的项目
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if(Hd electedValues.Value.IndexOf(((Literal)e.Item.Cells[1].FindControl("TitleShow")).Text) >= 0 )
{
HtmlI utCheckBox ChkSelected = (HtmlI utCheckBox)(e.Item.Cells[0].FindControl("ChkSelect"));
ChkSelected.Checked = true;
}
}
}
private void Button1_Click(object sender, System.EventArgs e)
{
//为了显示的方便进行替换的
Label1.Text = Hd electedValues.Value.Replace(","," lt;li> quot;);
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 A .NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// < ummary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemDataBound +=
new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.DataGrid1.PageIndexChanged +=
new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion

