首页 > 开发 > 综合 > 正文

DataGrid的几个小技巧!

2024-07-21 02:23:03
字体:
来源:转载
供稿:网友


方法一:使用模版列

我们在绑定好数据的datagrid增加一个模版列,在列中放置一个按钮
<asp:templatecolumn>
<itemtemplate>
<asp:button id="btndelete" runat="server" text="删除"></asp:button>
</itemtemplate>
</asp:templatecolumn>
然后我们在datagrid的itemdatabound中添加以下代码
switch(e.item.itemtype)
{
case(listitemtype.item):
case(listitemtype.alternatingitem):
{
button btn=(button)e.item.findcontrol("btndelete");
btn.attributes.add("onclick","return window.confirm('fs')");
break;
}
}
datagrid在绑定数据的时候将触发此事件,而且每行触发一次.我们可以通过e.item获得行,而通过e.item.itemtype获得行类型.

方法二:使用按钮列

我们在绑定好数据的datagrid增加一个删除按钮列
<asp:buttoncolumn text="删除" commandname="delete"></asp:buttoncolumn>
然后我们在datagrid的itemdatabound中添加以下代码
switch(e.item.itemtype)
{
case(listitemtype.item):
case(listitemtype.alternatingitem):
{
linkbutton btn=(linkbutton)e.item.cells[4].controls[0];
btn.attributes.add("onclick","return window.confirm('fs')");
break;
}
}
可以看到我们这里获得控件引用的方法有所不同,使用了e.item.cells[4].controls[0],而没有使用e.item.findcontrol("btndelete"),因为我


们现在使用的是按钮列,不能对按钮列的按钮设置id属性,而findcontrol是通过id来查找控件(当然我们也可以把前面的代码用


e.item.cells[4].controls[0]的代码来替换.).



添加序号列

绑定好一个datagrid
switch(e.item.itemtype)
{
case(listitemtype.item):
case(listitemtype.alternatingitem):
{
datagriditem row=(datagriditem)e.item;
tablecell cell=new tablecell();
cell.controls.add(new literalcontrol((e.item.itemindex+1).tostring()));
row.cells.addat(0,cell);
break;
}
case(listitemtype.header):
{
datagriditem row=(datagriditem)e.item;
tablecell cell=new tablecell();
cell.controls.add(new literalcontrol("序号"));
row.cells.addat(0,cell);
break;
}
}
这里我们用到了e.item.itemindex,获取来自 datagrid 控件的 items 集合的 datagriditem 对象的索引.


产生两行的标题行

绑定好一个datagrid,设置允许分页,设置页导航为上下型,一会我们将强制把上面的页导航更换成标题行.这里我想讲一下datagrid的行构成
最上面pager,用来放置分页导航,然后是表头header,接着是item和alternatingitem项目和交替项目(当然还有selecteditem选中项和edititem


编辑项等),然后是footer表脚,最下面还有一个pager.因为pager行是系统自动产生的,所以在itemdatabound事件中不能捕获此行,这里我使用了


itemcreated事件,添加代码如下
switch(e.item.itemtype)
{
case(listitemtype.pager):
{
if(first)
{
datagriditem row=(datagriditem)e.item;
row.cells.clear();
tablecell cell0=new tablecell();
cell0.controls.add(new literalcontrol("id"));
tablecell cell1=new tablecell();
cell1.columnspan=2;
cell1.controls.add(new literalcontrol("fullname"));
row.cells.add(cell0);
row.cells.add(cell1);
}
first=!first;
break;
}
}
这里的first用来判断是上面的pager还是下面的pager.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表