⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 多行选择显示(方法2_通过自定义控件).txt

📁 学习c#语言的一本好书可以帮助初学者
💻 TXT
字号:
介绍:
目前必须通过自定义控件来实现
1.RoseGrid
2.ViewState["SelectCond"]管理选择项的集合。
3.使用了一个普通ButtonColumn(不要用第二层的选择Button列)
4.使用:单击一次,再次单击取消。

1.控件
using System;
using System.Drawing;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Collections;
using System.Data;

namespace Movecont
{
	/// <summary>
	/// RoseGrid
	/// 作者:葛利峰
	/// 2005-3-29
	/// 具有扩展功能的DataGrid
	/// </summary>
	public class RoseGrid : DataGrid
	{
		public class SuperGridColumnTemplate : ITemplate
		{
			public void InstantiateIn(Control container) 
			{
				CheckBox cb = new CheckBox();
				container.Controls.Add(cb);
			}
		}
		//构造函数
		public RoseGrid()
		{
			AutoGenerateColumns=false;//禁用自动生成列
			ViewState["RowSelectFilter"] = "";
			//设置事件处理
			Init += new EventHandler(OnInit);
			ItemCreated += new DataGridItemEventHandler(OnItemCreated);
		}
		//在创建项时激发
		public void OnItemCreated(Object sender, DataGridItemEventArgs e)
		{
			//得到一个新建的项
			ListItemType itemType = e.Item.ItemType;

			//被选择项的背景色
			if (itemType == ListItemType.Item || itemType == ListItemType.AlternatingItem) 
			{
				DataRowView drv = (DataRowView) e.Item.DataItem;
				if (drv != null && RowSelectFilter != "")
				{
					if ((bool) drv["RowSelectFilter"])
						e.Item.BackColor = SelectBackColor;
				}
			}
		}
		//初始控件时激发
		public void OnInit(Object sender, EventArgs e)
		{
			if (AllowMultiSelect)//多选择项
				AddSelectColumn();			
		}
		private void AddSelectColumn()
		{
			TemplateColumn tc = new TemplateColumn();
			tc.ItemStyle.BackColor = Color.SkyBlue;
			tc.ItemTemplate = new SuperGridColumnTemplate();
			Columns.AddAt(0, tc);
		}
		public bool AllowMultiSelect = false;//允许多项选择
		//属性:行选择过滤器 
		public String RowSelectFilter 
		{
			get { return(String)  ViewState["RowSelectFilter"]; }
			set { ViewState["RowSelectFilter"] = value; }
		}
		//属性:选择时背景色
		private Color m_SelectBackColor = Color.SkyBlue;
		public Color SelectBackColor 
		{
			get { return m_SelectBackColor; }			
			set { m_SelectBackColor = value;}
		}
		//属性:数据源
		public override object DataSource
		{
			get {return base.DataSource;}
			set 
			{
				base.DataSource = value;

				DataTable dt = null;
				if (DataSource is DataTable)
					dt = (DataTable) DataSource;
				else if (DataSource is DataView)
					dt = ((DataView)DataSource).Table;
		
				DataColumn dc;	
				try 
				{
					if (dt.Columns.Contains("RowSelectFilter"))
						dt.Columns["RowSelectFilter"].Expression = RowSelectFilter;
					else
					{
						dc = new DataColumn("RowSelectFilter", typeof(bool), RowSelectFilter);
						dt.Columns.Add(dc);
					}
				}
				catch {RowSelectFilter="";}
			}
		}
	}
}
			
2.页面
<%@ Register TagPrefix="gee" Namespace="Movecont" Assembly="RoseGrid" %>
<%@ Page language="c#" Codebehind="WebForm5.aspx.cs" AutoEventWireup="false" Inherits="Co_6.WebForm5" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
	<HEAD>
		<title>WebForm5</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="宋体">
				<asp:Label id="Label1" style="Z-INDEX: 101; LEFT: 56px; POSITION: absolute; TOP: 56px" runat="server">自定义DataGrid终极控件示例</asp:Label>
				<gee:RoseGrid id="RoseGrid1" style="Z-INDEX: 102; LEFT: 56px; POSITION: absolute; TOP: 112px"
					runat="server" AutoGenerateColumns="False" SelectBackColor="SkyBlue">
					<Columns>
						<asp:BoundColumn DataField="employeeid" HeaderText="Id"></asp:BoundColumn>
						<asp:BoundColumn DataField="firstname" HeaderText="firstname"></asp:BoundColumn>
						<asp:BoundColumn DataField="lastname" HeaderText="lastname"></asp:BoundColumn>
						<asp:ButtonColumn Text="选择" CommandName="se"></asp:ButtonColumn>
					</Columns>
				</gee:RoseGrid></FONT>
		</form>
	</body>
</HTML>
3.代码
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;
using System.Data.SqlClient;
namespace Co_6
{
	/// <summary>
	/// WebForm5 的摘要说明。
	/// </summary>
	public class WebForm5 : System.Web.UI.Page
	{
		protected Movecont.RoseGrid RoseGrid1;
		protected System.Web.UI.WebControls.Label Label1;
	
		private void Page_Load(object sender, System.EventArgs e)
		{
			if(!Page.IsPostBack)
			{				
				ViewState["SelectCond"]=(new ArrayList());
				Display();
			}
		}
		private void Display()
		{
			string strConn,strCmd;
			strConn="server=localhost;uid=sa;pwd=;database=Northwind";
			strCmd="Select * From employees";
			SqlDataAdapter oCMD=new SqlDataAdapter(strCmd,strConn);
			DataSet oDS=new DataSet();
			oCMD.Fill(oDS,"MyList");
			DataTable dt=oDS.Tables["MyList"];				
			RoseGrid1.DataSource=oDS.Tables["MyList"];
			RoseGrid1.DataBind();
			Session["MyDataSet"]=oDS;//保存数据集
			oDS.Dispose();
			oDS=null;
			oCMD.Dispose();
			oCMD=null;
		}

		#region Web 窗体设计器生成的代码
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// <summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{    
			this.RoseGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.RoseGrid1_ItemCommand);
			this.RoseGrid1.SelectedIndexChanged += new System.EventHandler(this.RoseGrid1_SelectedIndexChanged);
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion

		private void RoseGrid1_SelectedIndexChanged(object sender, System.EventArgs e)
		{

		}
		//最新状态显示
		private void UpdateView()
		{
			DataSet ds=(DataSet)Session["MyDataSet"];
			DataView dv=ds.Tables["MyList"].DefaultView;
			RoseGrid1.DataSource=dv;
			RoseGrid1.DataBind();
		}

		private void RoseGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
		{
			if(e.CommandName=="se")
			{
				RoseGrid1.RowSelectFilter=ManExp(e.Item.Cells[0].Text);
				UpdateView();
			}
		}
		//管理表达式集合(单击选择,再次单击取消)
		private string ManExp(string key)
		{
			
			ArrayList al=(ArrayList)ViewState["SelectCond"];

			int j=al.IndexOf(key);
			if(j!=-1)
			{
				al.RemoveAt(j);
				ViewState["SelectCond"]=al;
			}
			else
			{
				al.Add(key);
				ViewState["SelectCond"]=al;
			}
			string res="";
			if(al.Count>0)
				res="Employeeid="+al[0].ToString();
			for(int i=1;i<al.Count;i++)
			{
				res+=" or Employeeid="+al[i].ToString();
			}
			return res;
		}

		private void CheckBox1_CheckedChanged(object sender, System.EventArgs e)
		{
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -