A在SP.NET跨页多选

在ASP.NET跨页多选


本文介绍怎样在ASP.NET中实现多页面选择的问题。其详细思路非常easy:用隐藏的INPUT记住每次选择的项目,在进行数据绑定时。检查保存的值,再在DataGrid中进行选中显示。

以下时完整的代码和样例:

  查看样例

  SelectMultiPages.aspx

<%@ Page EnableViewState="true" CodeBehind="SelectMultiPages.aspx.cs" Language="c#" 
AutoEventWireup="false" Inherits="eMeng.Exam.SelectMultiPages" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML> 
<HEAD> 
<title>跨页面实现多选</title> 
<META http-equiv="content-type" content="text/html; charset=gb2312"> 
<style> 
* {FONT-SIZE:12PX} 
#Status {text-align:left} 
</style> 
<script language="JAVASCRIPT"> 
function AddRemoveValues(oChk) { 
//在处理这个地方须要注意的是:你保存的值应该具有唯一性。这样才干不会替换错误的项。

 
if(oChk.checked) 
SelectMultiPage.HdnSelectedValues.value += "," + oChk.value; 
else 
SelectMultiPage.HdnSelectedValues.value = SelectMultiPage.HdnSelectedValues.value.replace("," + oChk.value,""); 

</script> 
</HEAD> 
<BODY> 
<form id="SelectMultiPage" runat="server"> 
<asp:datagrid id="DataGrid1" HorizontalAlign="Center" AutoGenerateColumns="False" Width="600px" 
AllowPaging="True" runat="server"> 
<AlternatingItemStyle BackColor="#EEEEEE"></AlternatingItemStyle> 
<HeaderStyle BackColor="#AAAADD" Font-Bold="True" HorizontalAlign="Center"></HeaderStyle> 
<PagerStyle HorizontalAlign="Right" Mode="NumericPages" Visible="True"></PagerStyle> 
<Columns> 
<asp:TemplateColumn HeaderText="选择"> 
<ItemTemplate> 
<input type="checkbox" runat="server" id="chkSelect" onclick="AddRemoveValues(this)" 
value='<%#DataBinder.Eval(Container.DataItem,"Title")%>'/> 
</ItemTemplate> 
</asp:TemplateColumn> 
<asp:TemplateColumn HeaderText="文章标题"> 
<ItemTemplate> 
<asp:Literal Text='<%# DataBinder.Eval(Container.DataItem, "Title") %>' runat="server" ID="TitleShow"/> 
</ItemTemplate> 
</asp:TemplateColumn> 
<asp:TemplateColumn HeaderText="公布时间"> 
<ItemTemplate> 
<asp:Literal Text='<%# DataBinder.Eval(Container.DataItem, "CreateDate").ToString() %>' runat="server"/> 
</ItemTemplate> 
</asp:TemplateColumn> 
</Columns> 
</asp:datagrid> 
<div align=center> 
<asp:button id="Button1" runat="server" Text="得到所选的值"></asp:button> 
<div id="Status"> 
<asp:label id="Label1" runat="server"></asp:label> 
</div> 
<INPUT id="HdnSelectedValues" type="hidden" name="HdnSelectedValues" runat="server"> 
</div> 
</form> 
</BODY> 
</HTML>

SelectMultiPages.aspx.cs

using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Data.OleDb; 
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 eMeng.Exam 

/// <summary> 
/// SelectMultiPages 的摘要说明。 
/// </summary> 
public class SelectMultiPages : System.Web.UI.Page 

protected System.Web.UI.WebControls.Button Button1; 
protected System.Web.UI.WebControls.Label Label1; 
protected System.Web.UI.HtmlControls.HtmlInputHidden HdnSelectedValues; 
protected System.Web.UI.WebControls.DataGrid DataGrid1;

private void Page_Load(object sender, System.EventArgs e) 

// 在此处放置用户代码以初始化页面 
if(!Page.IsPostBack) 
BindData(); 

private void DataGrid1_PageIndexChanged(object source, DataGridPageChangedEventArgs e) 

DataGrid1.CurrentPageIndex = e.NewPageIndex; 
BindData(); 
}

void BindData() 

OleDbConnection cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
+ HttpContext.Current.Server.MapPath("aspx.mdb")); 
OleDbDataAdapter da = new OleDbDataAdapter("Select Title, CreateDate from Document",cn); 
DataSet ds = new DataSet(); 
da.Fill(ds); 
DataGrid1.DataSource= ds; 
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(HdnSelectedValues.Value.IndexOf(((Literal)e.Item.Cells[1].FindControl("TitleShow")).Text) >= 0 ) 

HtmlInputCheckBox ChkSelected = (HtmlInputCheckBox)(e.Item.Cells[0].FindControl("ChkSelect")); 
ChkSelected.Checked = true; 



private void Button1_Click(object sender, System.EventArgs e) 

//为了显示的方便进行替换的 
Label1.Text = HdnSelectedValues.Value.Replace(",","<li>"); 
}

#region Web 窗口设计器生成的代码 
override protected void OnInit(EventArgs e) 

// 
// CODEGEN: 该调用是 ASP.NET Web 窗口设计器所必需的。 
// 
InitializeComponent(); 
base.OnInit(e); 
}

/// <summary> 
/// 设计器支持所需的方法 - 不要使用代码编辑器改动 
/// 此方法的内容。 
/// </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


}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

posted @ 2015-07-26 12:19  mengfanrong  阅读(236)  评论(0编辑  收藏  举报