DataGrid的事件中,ItemCreated和ItemDataBound是尤為重要并且經常要用到的兩個,其中的ItemCreated事件在DataGrid創建表格行時觸發,而ItemDataBound則在數據綁定被綁定到相應的行后觸發,前者可以用來在DataGrid中創建動態控件,比如下面的例子中在DataGrid的標題行中加入一個Button并注冊它的Click事件,而ItemDataBound被觸發時,數據已經綁定到相應的行,這時就可以獲取當前行的數據,并根據這些數據來執行相應的操作,比如下面的示例中把綁定到“性別”字段的book值用string替換、為“禁止登錄”列的CheckBox設置選中狀態等,示例代碼如下,保存為aspx文件后放在虛擬目錄下即可運行:
<%@ Page Language="C#" Debug="True"%>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<script language="C#" runat="server">
void Page_Load(Object src, EventArgs e)
{
if(!Page.IsPostBack){
DataTable table=new DataTable();
table.Columns.Add(new DataColumn("編號",typeof(int)));
table.Columns.Add(new DataColumn("姓名",typeof(string)));
//性別列,用bool值表示,男為true,女為false
table.Columns.Add(new DataColumn("性別",typeof(bool)));
table.Columns.Add(new DataColumn("禁止登錄",typeof(bool)));
DataRow row;
Random rd=new Random();
for(int i=0;i<10;i++){
row=table.NewRow();
row[0]=i+1;
row[1]="用戶"+(i+1).ToString();
row[2]=(rd.Next(0,80)%2==0); //用隨機數來生成性別,以示公正原則:)
row[3]=(i%2==0);
table.Rows.Add(row);
}
MyDataGrid.DataSource=table;
MyDataGrid.DataBind();
}
}
void MyDataGrid_ItemCreated(object src,DataGridItemEventArgs e){
if(e.Item.ItemType==ListItemType.Header){
Button btn=new Button();
btn.Text=e.Item.Cells[3].Text;
btn.Click+=new EventHandler(btn_Click);
e.Item.Cells[3].Controls.Clear();
e.Item.Cells[3].Controls.Add(btn);
}
}
void MyDataGrid_ItemDataBound(object src,DataGridItemEventArgs e){
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){
DataRowView rv=(DataRowView)e.Item.DataItem;
//把性別列的bool值替換為相應的文字“男”或“女”
if((bool)rv["性別"]==true)
e.Item.Cells[2].Text="男";
else
e.Item.Cells[2].Text="女";
//根據“禁止登錄”列的值設置CheckBox的選中狀態
CheckBox ckb=e.Item.FindControl("ckb_denyLogin") as CheckBox;
if(ckb!=null){
ckb.Checked=(bool)rv["禁止登錄"];
}
}
}
void btn_Click(object src,EventArgs e){
string deniedUsers=""; //保存用戶選中的“禁止登錄”的用戶編號
CheckBox ckb;
for(int i=0;i<MyDataGrid.Items.Count;i++){
if(MyDataGrid.Items[i].ItemType==ListItemType.Item||MyDataGrid.Items[i].ItemType==ListItemType.AlternatingItem){
ckb=(CheckBox)MyDataGrid.Items[i].FindControl("ckb_denyLogin");
if(ckb!=null&&ckb.Checked){
deniedUsers+=MyDataGrid.DataKeys[i].ToString()+",";
}
}
}
deniedUsers=deniedUsers.Trim(',');
msglbl.Text="已被禁止登錄的用戶:"+deniedUsers;
}
</script>
<html>
<head>
<title> Webdiyer制造:)</title>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Webdiyer(http://www.webdiyer.com)">
</head>
<body>
<form runat="server">
<ASP:DataGrid id="MyDataGrid" width="500px" runat="server" OnItemCreated="MyDataGrid_ItemCreated" OnItemDataBound="MyDataGrid_ItemDataBound" DataKeyField="編號" AutoGenerateColumns=false>
<HeaderStyle HorizontalAlign="center" BackColor="#9999CC"/>
<Columns>
<asp:BoundColumn DataField="編號" HeaderText="編號"/>
<asp:BoundColumn DataField="姓名" HeaderText="姓名"/>
<asp:BoundColumn DataField="性別" HeaderText="性別"/>
<asp:TemplateColumn HeaderText="禁止登錄">
<ItemStyle HorizontalAlign="center"/>
<ItemTemplate>
<asp:CheckBox runat="server" id="ckb_denyLogin"/>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<asp:Label runat="server" id="msglbl"/>
</form>
</body>
</html>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=225218