下面在扩展用到了ITemplate这个接口,这个接口每次都会调用InstantiateIn这个方法,所以我们在这个方法上
实现一些加入checkbox的操作.
代码如下:
Code
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Collections;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Drawing;
namespace WebClass
{
public class GridViewOfCheckBox:GridView
{
public enum CustomColumnAlign
{
Left, Right
}
private CustomColumnAlign _align = CustomColumnAlign.Left;
private string _checkBoxID="CheckBox1";
private Color _mouseOverColor;
private DataControlFieldCollection _columnCol = new DataControlFieldCollection();
[Browsable(true)]
[Description("所建立的checkBox所在对齐方式")]
[Category("扩展")]
public CustomColumnAlign Align
{
get
{
return _align;
}
set
{
_align = value;
}
}
[Browsable(true)]
[Description("所建立的checkBoxID")]
// [DefaultValue("CheckBox1")]
[Category("扩展")]
public string CheckBoxID
{
get
{
return _checkBoxID;
}
set
{
_checkBoxID = value;
}
}
鼠标经过行时的颜色#region 鼠标经过行时的颜色
[Browsable(true)]
[Description("鼠标经过行的颜色")]
[DefaultValue("")]
[Category("扩展")]
public Color MouseOverColor
{
get
{
return _mouseOverColor;
}
set
{
_mouseOverColor = value;
}
}
protected override void OnRowDataBound(GridViewRowEventArgs e)
{
if (!_mouseOverColor.IsEmpty)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//鼠标经过时,行背景色变
e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;this.style.backgroundColor='#" + this._mouseOverColor.ToArgb().ToString("X").Substring(2, 6) + "'");
// //当鼠标移开时还原背景色
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c");
}
}
base.OnRowDataBound(e);
}
#endregion
protected override ICollection CreateColumns(PagedDataSource dataSource, bool useDataSource)
{
ArrayList col = base.CreateColumns(dataSource, useDataSource) as ArrayList;
CreatCheckBox(col);
_columnCol.Clear();
foreach (DataControlField c in col)
{
_columnCol.Add(c);
}
return col;
}
public void CreatCheckBox(ArrayList col)
{
TemplateField checkColumn = new TemplateField();
checkColumn.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
checkColumn.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
CheckBoxItemTemplate cbItemTemplate = new CheckBoxItemTemplate();
CheckBoxItemTemplate.CheckBoxItemId=_checkBoxID;
checkColumn.ItemTemplate = cbItemTemplate;
CheckBoxHeaderTemplate cbHeaderTemplate = new CheckBoxHeaderTemplate();
checkColumn.HeaderTemplate = cbHeaderTemplate;
if (Align == CustomColumnAlign.Left)
{
col.Insert(0, checkColumn);
}
else if (Align == CustomColumnAlign.Right)
{
col.Add(checkColumn);
}
}
}
public class CheckBoxItemTemplate : ITemplate
{
private static string _CheckBoxID;
public static string CheckBoxItemId
{
get
{
return _CheckBoxID;
}
set
{
_CheckBoxID = value;
}
}
public void InstantiateIn(Control container)
{
CheckBox cb = new CheckBox();
cb.ID = _CheckBoxID;
container.Controls.Add(cb);
}
}
public class CheckBoxHeaderTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
Label la=new Label();
la.Text="选择";
container.Controls.Add(la);
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Collections;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Drawing;
namespace WebClass
{
public class GridViewOfCheckBox:GridView
{
public enum CustomColumnAlign
{
Left, Right
}
private CustomColumnAlign _align = CustomColumnAlign.Left;
private string _checkBoxID="CheckBox1";
private Color _mouseOverColor;
private DataControlFieldCollection _columnCol = new DataControlFieldCollection();
[Browsable(true)]
[Description("所建立的checkBox所在对齐方式")]
[Category("扩展")]
public CustomColumnAlign Align
{
get
{
return _align;
}
set
{
_align = value;
}
}
[Browsable(true)]
[Description("所建立的checkBoxID")]
// [DefaultValue("CheckBox1")]
[Category("扩展")]
public string CheckBoxID
{
get
{
return _checkBoxID;
}
set
{
_checkBoxID = value;
}
}
鼠标经过行时的颜色#region 鼠标经过行时的颜色
[Browsable(true)]
[Description("鼠标经过行的颜色")]
[DefaultValue("")]
[Category("扩展")]
public Color MouseOverColor
{
get
{
return _mouseOverColor;
}
set
{
_mouseOverColor = value;
}
}
protected override void OnRowDataBound(GridViewRowEventArgs e)
{
if (!_mouseOverColor.IsEmpty)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//鼠标经过时,行背景色变
e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;this.style.backgroundColor='#" + this._mouseOverColor.ToArgb().ToString("X").Substring(2, 6) + "'");
// //当鼠标移开时还原背景色
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c");
}
}
base.OnRowDataBound(e);
}
#endregion
protected override ICollection CreateColumns(PagedDataSource dataSource, bool useDataSource)
{
ArrayList col = base.CreateColumns(dataSource, useDataSource) as ArrayList;
CreatCheckBox(col);
_columnCol.Clear();
foreach (DataControlField c in col)
{
_columnCol.Add(c);
}
return col;
}
public void CreatCheckBox(ArrayList col)
{
TemplateField checkColumn = new TemplateField();
checkColumn.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
checkColumn.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
CheckBoxItemTemplate cbItemTemplate = new CheckBoxItemTemplate();
CheckBoxItemTemplate.CheckBoxItemId=_checkBoxID;
checkColumn.ItemTemplate = cbItemTemplate;
CheckBoxHeaderTemplate cbHeaderTemplate = new CheckBoxHeaderTemplate();
checkColumn.HeaderTemplate = cbHeaderTemplate;
if (Align == CustomColumnAlign.Left)
{
col.Insert(0, checkColumn);
}
else if (Align == CustomColumnAlign.Right)
{
col.Add(checkColumn);
}
}
}
public class CheckBoxItemTemplate : ITemplate
{
private static string _CheckBoxID;
public static string CheckBoxItemId
{
get
{
return _CheckBoxID;
}
set
{
_CheckBoxID = value;
}
}
public void InstantiateIn(Control container)
{
CheckBox cb = new CheckBox();
cb.ID = _CheckBoxID;
container.Controls.Add(cb);
}
}
public class CheckBoxHeaderTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
Label la=new Label();
la.Text="选择";
container.Controls.Add(la);
}
}
}