DataGrid的幾個小技巧 轉自博客園的DDLLY命名空間

原帖:http://www.cnblogs.com/renrenqq/archive/2004/06/05/13552.html#FeedBack

刪除時給出提示


方法一:使用模版列


我們在綁定好數據的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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章