?? 多行選擇顯示(方法2_通過(guò)自定義控件).txt
字號(hào):
介紹:
目前必須通過(guò)自定義控件來(lái)實(shí)現(xiàn)
1.RoseGrid
2.ViewState["SelectCond"]管理選擇項(xiàng)的集合。
3.使用了一個(gè)普通ButtonColumn(不要用第二層的選擇Button列)
4.使用:?jiǎn)螕粢淮危俅螁螕羧∠?
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
/// 具有擴(kuò)展功能的DataGrid
/// </summary>
public class RoseGrid : DataGrid
{
public class SuperGridColumnTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
CheckBox cb = new CheckBox();
container.Controls.Add(cb);
}
}
//構(gòu)造函數(shù)
public RoseGrid()
{
AutoGenerateColumns=false;//禁用自動(dòng)生成列
ViewState["RowSelectFilter"] = "";
//設(shè)置事件處理
Init += new EventHandler(OnInit);
ItemCreated += new DataGridItemEventHandler(OnItemCreated);
}
//在創(chuàng)建項(xiàng)時(shí)激發(fā)
public void OnItemCreated(Object sender, DataGridItemEventArgs e)
{
//得到一個(gè)新建的項(xiàng)
ListItemType itemType = e.Item.ItemType;
//被選擇項(xiàng)的背景色
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;
}
}
}
//初始控件時(shí)激發(fā)
public void OnInit(Object sender, EventArgs e)
{
if (AllowMultiSelect)//多選擇項(xiàng)
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;//允許多項(xiàng)選擇
//屬性:行選擇過(guò)濾器
public String RowSelectFilter
{
get { return(String) ViewState["RowSelectFilter"]; }
set { ViewState["RowSelectFilter"] = value; }
}
//屬性:選擇時(shí)背景色
private Color m_SelectBackColor = Color.SkyBlue;
public Color SelectBackColor
{
get { return m_SelectBackColor; }
set { m_SelectBackColor = value;}
}
//屬性:數(shù)據(jù)源
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.頁(yè)面
<%@ 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 的摘要說(shuō)明。
/// </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;//保存數(shù)據(jù)集
oDS.Dispose();
oDS=null;
oCMD.Dispose();
oCMD=null;
}
#region Web 窗體設(shè)計(jì)器生成的代碼
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 該調(diào)用是 ASP.NET Web 窗體設(shè)計(jì)器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 設(shè)計(jì)器支持所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內(nèi)容。
/// </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)
{
}
//最新狀態(tài)顯示
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();
}
}
//管理表達(dá)式集合(單擊選擇,再次單擊取消)
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)
{
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -