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.