本例用代码实现了创建DataGrid并响应了CheckBox事件,并实现了超链接列的多变量传送。
创建一个前台页面
CreateDataGrid.aspx:
在Form中添加一个PlcaeHolder,ID为"ph",Runat="Server"
后台页面
CreateDatagrid.aspx.cs
public class CreateDataGrid : System.Web.UI.Page
...{
public String sql = "Select FirstName,LastName,HomePhone,Title FROM Employees";
public DataGrid mygrid = new DataGrid();
protected System.Web.UI.WebControls.PlaceHolder ph;
public String SortExpression;
private void Page_Load(object sender, System.EventArgs e)
...{
//CreateDataGridForm.Controls.Add(MakeGrid());
this.ph.Controls.Add(MakeGrid());
}
// protected override void CreateChildControls()
// {
//base.CreateChildControls ();
//}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
...{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
...{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/**//// <summary>
/// 创建一个模板列和一个列模板
/// </summary>
public TemplateColumn tm = new TemplateColumn();
public ColumnTemplate mycol = new ColumnTemplate();
//返回DataView
public DataView CreateDataSource ()
...{
string strSql;
strSql = "Data Source=localhost;Initial Catalog=Northwind;User Id=sa;Password=sa;";
SqlConnection conn = new SqlConnection(strSql);
SqlDataAdapter db_sqladaptor = new SqlDataAdapter(sql,conn);
DataSet ds = new DataSet();
db_sqladaptor.Fill(ds,"Employees");
DataView myView = ds.Tables["Employees"].DefaultView;
//myView.Sort=SortExpression;
//Response.Write(sql);
return myView;
}
/**//// <summary>
/// 处理排序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void Sort_Grid(Object sender, DataGridSortCommandEventArgs e)
...{
SortExpression = e.SortExpression.ToString();
Session["SortField"]=SortExpression.Trim();
if(Session["Order"]==null) Session["Order"] = "ASC";
Session["Order"] = (Session["Order"].ToString()=="DESC")?"ASC":"DESC";
if(Session["SortField"]==null) Session["SortField"] = "FirstName";
sql += " ORDER BY "+Session["SortField"].ToString() + " " + Session["Order"].ToString();
mygrid.DataSource = CreateDataSource();
mygrid.DataBind();
}
/**//// <summary>
/// 创建和设置DataGrid属性,这里的属性设置为固定值,但也可以动态设置
/// </summary>
/// <returns></returns>
public DataGrid MakeGrid()
...{
mygrid.CellPadding=2;
mygrid.Attributes.Add("align","center");
mygrid.CellSpacing=0;
mygrid.Width=500;
mygrid.BorderWidth=1;
mygrid.BorderColor=ColorTranslator.FromHtml("Black");
mygrid.AutoGenerateColumns=false;
mygrid.ForeColor=ColorTranslator.FromHtml("Black");
mygrid.Font.Size=9;
mygrid.Font.Name="宋体";
mygrid.AllowSorting=true;
/**////sort命令的事件处理器
//mygrid.SortCommand += new DataGridSortCommandEventHandler(Sort_Grid);
mygrid.ItemDataBound +=new DataGridItemEventHandler(mygrid_ItemDataBound);
/**////设置headerstyle
mygrid.HeaderStyle.BackColor=ColorTranslator.FromHtml("Gold");
mygrid.HeaderStyle.ForeColor=ColorTranslator.FromHtml("Black");
mygrid.HeaderStyle.Font.Name="宋体";
mygrid.HeaderStyle.Font.Size=9;
mygrid.HeaderStyle.Font.Bold=true;
mygrid.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
/**////设置alternating style
mygrid.AlternatingItemStyle.BackColor=ColorTranslator.FromHtml("Silver");
mygrid.AlternatingItemStyle.ForeColor=ColorTranslator.FromHtml("Black");
/**////设置itemstyle
mygrid.ItemStyle.HorizontalAlign=HorizontalAlign.Left;
/**////创建绑定列和属性
HyperLinkColumn FirstName = new HyperLinkColumn();
BoundColumn LastName = new BoundColumn();
BoundColumn HomePhone = new BoundColumn();
BoundColumn Title = new BoundColumn();
// FirstName.HeaderText="名字";
// FirstName.DataField="FirstName";
// FirstName.SortExpression="FirstName";
FirstName.HeaderText="名字";
FirstName.DataTextField ="FirstName";
FirstName.SortExpression="FirstName";
FirstName.NavigateUrl = "http://localhost/test.aspx";
LastName.HeaderText="姓";
LastName.DataField="LastName";
LastName.SortExpression="LastName";
HomePhone.HeaderText="电话";
HomePhone.DataField="HomePhone";
HomePhone.SortExpression="HomePhone";
Title.HeaderText="职务";
Title.DataField="Title";
Title.SortExpression="Title";
mygrid.Columns.AddAt(0, FirstName);
mygrid.Columns.AddAt(1, LastName);
mygrid.Columns.AddAt(2, HomePhone);
mygrid.Columns.AddAt(3, Title);
/**////设置模板列属性和ItemStyle模板
tm.HeaderText="**删除信息**";
tm.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
tm.ItemStyle.BackColor = ColorTranslator.FromHtml("#FFF778");
tm.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
TemplateColumn aa=new TemplateColumn();
ColumnTemplate1 tt = new ColumnTemplate1();
aa.ItemTemplate = tt;
/**////创建列模板。
///列模板从ITemplate继承
tm.ItemTemplate = mycol;
mygrid.Columns.AddAt(4, tm);
mygrid.Columns.AddAt(5,aa);
/**////绑定和返回
mygrid.DataSource = CreateDataSource();
mygrid.DataBind();
return mygrid;
}
private void mygrid_ItemDataBound(object sender, DataGridItemEventArgs e)
...{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
...{
HyperLink link = (HyperLink)e.Item.Cells[0].Controls[0];
string url = link.NavigateUrl;
//实现多参数链接
url += "?id=" + e.Item.Cells[1].Text + "&id2=" + e.Item.Cells[2].Text;
link.NavigateUrl = url;
}
}
}
再添加关键的几段
/**//// ColumnTemplate 从ITemplate继承。
/// "InstantiateIn"定义子控件的属于谁
public class ColumnTemplate : ITemplate
...{
public void InstantiateIn(Control container)
...{
Label myLabel = new Label();
myLabel.Text="点击删除";
CheckBox mycheckbox = new CheckBox();
container.Controls.Add(myLabel);
container.Controls.Add(mycheckbox);
}
}
添加CheckBox事件:
public class ColumnTemplate1 : ITemplate
...{
public void InstantiateIn(Control container)
...{
Label myLabel = new Label();
myLabel.Text="test";
CheckBox lnk = new CheckBox();
lnk.AutoPostBack = true;
lnk.CheckedChanged +=new EventHandler(lnk_CheckedChanged);
container.Controls.Add(myLabel);
container.Controls.Add(lnk);
}
private void lnk_CheckedChanged(object sender, EventArgs e)
...{
CheckBox lnk = (CheckBox)sender;
DataGrid dg = (DataGrid)lnk.NamingContainer.NamingContainer;
if(dg == null) return;
//实现CheckBox事件响应
DataGridItem di =(DataGridItem)lnk.NamingContainer;
HyperLink lnkID= (HyperLink)di.Cells[0].Controls[0];
string s2 = lnkID.Text.Trim()+lnk.ID+"被选中了!";
}
}