本例用代码实现了创建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 ();
//}
#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+"被选中了!";
}
}
新闻热点
疑难解答