用代码创建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 == nullreturn;
             
//实现CheckBox事件响应
            DataGridItem di =(DataGridItem)lnk.NamingContainer;
            HyperLink lnkID= (HyperLink)di.Cells[0].Controls[0];
            string s2 =  lnkID.Text.Trim()+lnk.ID+"被选中了!"
;
        }

    }

posted @ 2007-12-29 11:49  邀月  阅读(2465)  评论(0编辑  收藏  举报