用代码创建DataGrid的多链接及checkbox事件响应
本例用代码实现了创建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 窗体设计器生成的代码 /// <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+"被选中了!"; } } |