net DataGrid_ItemDataBound和DataGrid_ItemCommand事件
1.DataGrid_ItemCommand事件什么时候触发?
答:举个例子吧,比如你加个摸版列按纽或随便什么控件,你点击它就触发了,举个例子,你加了一个LinkButton的模版列,作用是在删除时提示是否删除,这时候你就必须在点击删除DataGrid_ItemCommand事件就会被触发
2.DataGrid_ItemDataBound事件什么时间触发?
当项被数据绑定到 DataGrid 控件后,将引发 ItemDataBound 事件。此事件提供了在客户端显示数据项之前访问该数据项的最后机会
3..DataGrid_ItemData实例
private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//选择DataGrid中模板的链接"HLName"
HyperLink mhlink=(HyperLink)e.Item.FindControl("HLName");
DataRowView drv = (DataRowView)e.Item.DataItem;
//((DataRowView)Container.DataItem):此时被强制性转换为视图类型后它的意思为:DataRowView视图中的每一行
//设置每一行的序号
int num = e.Item.ItemIndex + 1;
e.Item.Cells[0].Text = num.ToString();
//设置链接行的名字和URL及字段
mhlink .Text=drv["Name"].ToString ();
mhlink.NavigateUrl = "/InfoDetail.aspx?DetailID="+drv["DetailID"].ToString();
mhlink.Target="_blank";
//“性别”字段在数据库中是以“0”和“1”存储的,现在以“男”和“女”展现给用户
int sex = Convert.ToInt32(drv["FSex"]);
e.Item.Cells[2].Text = (sex == 0 ? "男" : "女");
//将“婚否”字段绑定到 CheckBox
int married = Convert.ToInt32(drv["FMarried"]);
CheckBox chk = (CheckBox)e.Item.FindControl("CheckBox1");
chk.Checked = (married == 0 ? false : true);
}
}
效果如图:
DataGrid的DataGrid_ItemDataBound事件
有时候需要统计DataGrid中一列或者多列数值列的和,在DataGrid_ItemDataBound里写一段小代码来实现,和显示在DataGrid的Footer里面首先定义一个
decimal iTotal
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if(e.Item.Cells[1].Text != null && e.Item.Cells[1].Text != "")
{
iTotal += Convert.ToDecimal(e.Item.Cells[1].Text.ToString());
}
}
if(e.Item.ItemType == ListItemType.Footer)
{
e.Item.Cells[0].Text = "合计";
e.Item.Cells[1].Text = iTotal.ToString(); //显示和
}
如果有多列需要同时求和,可以用数组来实现首先定义一个decimal数组
decimal[] iTotal = new decimal[5];
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
for(int i=0;i<5;i++)
{
if(e.Item.Cells[i+1].Text != null && e.Item.Cells[i+1].Text != "")
{
iTotal += Convert.ToDecimal(e.Item.Cells[i+1].Text.ToString());
}
}
}
if(e.Item.ItemType == ListItemType.Footer)
{
e.Item.Cells[0].Text = "合计";
for(int i=0;i<5;i++)
{
e.Item.Cells[i+1].Text = iTotal.ToString();
}
}
这种做法只能统计DataGrid中一页数据某数值列的和,如果想统计全部数据的和,变通一下完全可以实现.
DataGrid的DataGrid_ItemDataBound事件可以实现好多比较实用的功能
比如可以为每条记录删除按钮添加确认提示等.
注:
1. Container是一个容器, Container.DataItem代表数据源中的每一行数据,是一个对象类型!
2. ((DataRowView)Container.DataItem):此时被强制性转换为视图类型后它的意思为:DataRowView视图中的每一行
3. ((DataRowView)Container.DataItem).Row:它这时候的意思为:DataRowView视图中的某一行。
4. ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation"):它这时候的意思为:DataRowView视图中某一行下的所有子行。
注意4:<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>
在绑定的时候访问绑定到一行的数据((DataRowView)Container.DataItem).Row
DataRowView 是指绑定上来的数据为dataview 对象 , GetChildRows("myrelation") 是指得到对应的子行。那样的话,在dataset中就必须有二张表,二张表有关系建立,关系名为myrelation ,通过父行((DataRowView)Container.DataItem).Row 找所有行
答:举个例子吧,比如你加个摸版列按纽或随便什么控件,你点击它就触发了,举个例子,你加了一个LinkButton的模版列,作用是在删除时提示是否删除,这时候你就必须在点击删除DataGrid_ItemCommand事件就会被触发
2.DataGrid_ItemDataBound事件什么时间触发?
当项被数据绑定到 DataGrid 控件后,将引发 ItemDataBound 事件。此事件提供了在客户端显示数据项之前访问该数据项的最后机会
3..DataGrid_ItemData实例
private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//选择DataGrid中模板的链接"HLName"
HyperLink mhlink=(HyperLink)e.Item.FindControl("HLName");
DataRowView drv = (DataRowView)e.Item.DataItem;
//((DataRowView)Container.DataItem):此时被强制性转换为视图类型后它的意思为:DataRowView视图中的每一行
//设置每一行的序号
int num = e.Item.ItemIndex + 1;
e.Item.Cells[0].Text = num.ToString();
//设置链接行的名字和URL及字段
mhlink .Text=drv["Name"].ToString ();
mhlink.NavigateUrl = "/InfoDetail.aspx?DetailID="+drv["DetailID"].ToString();
mhlink.Target="_blank";
//“性别”字段在数据库中是以“0”和“1”存储的,现在以“男”和“女”展现给用户
int sex = Convert.ToInt32(drv["FSex"]);
e.Item.Cells[2].Text = (sex == 0 ? "男" : "女");
//将“婚否”字段绑定到 CheckBox
int married = Convert.ToInt32(drv["FMarried"]);
CheckBox chk = (CheckBox)e.Item.FindControl("CheckBox1");
chk.Checked = (married == 0 ? false : true);
}
}
效果如图:
DataGrid的DataGrid_ItemDataBound事件
有时候需要统计DataGrid中一列或者多列数值列的和,在DataGrid_ItemDataBound里写一段小代码来实现,和显示在DataGrid的Footer里面首先定义一个
decimal iTotal
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if(e.Item.Cells[1].Text != null && e.Item.Cells[1].Text != "")
{
iTotal += Convert.ToDecimal(e.Item.Cells[1].Text.ToString());
}
}
if(e.Item.ItemType == ListItemType.Footer)
{
e.Item.Cells[0].Text = "合计";
e.Item.Cells[1].Text = iTotal.ToString(); //显示和
}
如果有多列需要同时求和,可以用数组来实现首先定义一个decimal数组
decimal[] iTotal = new decimal[5];
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
for(int i=0;i<5;i++)
{
if(e.Item.Cells[i+1].Text != null && e.Item.Cells[i+1].Text != "")
{
iTotal += Convert.ToDecimal(e.Item.Cells[i+1].Text.ToString());
}
}
}
if(e.Item.ItemType == ListItemType.Footer)
{
e.Item.Cells[0].Text = "合计";
for(int i=0;i<5;i++)
{
e.Item.Cells[i+1].Text = iTotal.ToString();
}
}
这种做法只能统计DataGrid中一页数据某数值列的和,如果想统计全部数据的和,变通一下完全可以实现.
DataGrid的DataGrid_ItemDataBound事件可以实现好多比较实用的功能
比如可以为每条记录删除按钮添加确认提示等.
注:
1. Container是一个容器, Container.DataItem代表数据源中的每一行数据,是一个对象类型!
2. ((DataRowView)Container.DataItem):此时被强制性转换为视图类型后它的意思为:DataRowView视图中的每一行
3. ((DataRowView)Container.DataItem).Row:它这时候的意思为:DataRowView视图中的某一行。
4. ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation"):它这时候的意思为:DataRowView视图中某一行下的所有子行。
注意4:<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>
在绑定的时候访问绑定到一行的数据((DataRowView)Container.DataItem).Row
DataRowView 是指绑定上来的数据为dataview 对象 , GetChildRows("myrelation") 是指得到对应的子行。那样的话,在dataset中就必须有二张表,二张表有关系建立,关系名为myrelation ,通过父行((DataRowView)Container.DataItem).Row 找所有行
posted on 2009-09-13 11:56 smallfenger 阅读(1442) 评论(0) 编辑 收藏 举报