呵呵,你看看下面我写的这个文章吧,应该和你所说的问题差不多,改一改就可以了
二、 让初学者为难的另一个问题就是DataList或DataGid内部绑定控件的事件处理问题 如果这里的服务器控件是页面上普通的控件的话,那很好办,在其属性窗口事件栏里对要进行绑定的事件双击就可以了。而对于DataList等控件里面的服务器却没有事件栏这一个选项。因而就有好多人就不知道怎么办了,而实际上很多人都需要这样的功能。根据我给一个朋友解决的过程来讲一下,我的朋友他对dataGrid里的每一条记录都要审核处理,因而他在每条记录里都放了一个checkbox(绑定是否已经被审核处理过),并且想要只要一点未选中的checkbox就能更新数据库。分析其过程,在他选中checkbox的时候就要去更新数据库,因而此时checkbox必须要执行回传;而且在回传时只有checkbox执行了动作并改变了状态,因而事件的触发、数据的更新也必须由它来完成,固它必须要有事件处理程序。原理就是这样子的,下面就是解决方案:
1. 设置相应checkbox的autopostback属性为true;
2.在datagrid的itemcreated事件中添加其中的checkbox事件处理,如下 private void DataList1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item)
{
CheckBox chk = (CheckBox)e.Item.FindControl("CheckBox1"); // 给项上的CheckBox添加出发事件 chk.CheckedChanged +=new EventHandler(this.CheckBox1Change);
}
}
3.在相应的事件处理方法中,如下:
private void CheckBox1Change (object sender,EventArgs e)
{
CheckBox myCheckBox = (CheckBox)sender;
int id;
if(myCheckBox.Checked == true) //判断是不是审核通过
{
id=myCheckBox.Text//这里我让更新的ID (主键)绑定到了CheckBox1的Text属性上去了.
据库处理;//省略
}
}
当然这里你也可以不让CheckBox1的Text属性来绑定主键,比如你可能让其中的其它控件来绑定主键,这样可以通过下面来访问他们.
TableCell myTableCell = (TableCell)(myCheckBox.Parent); //checkBox1的父容器,即所在行所在列的cell
DataGridItem item = (DataGridItem)myTableCell.Parent; //就是DataGrid等的一个行了
控件类型 my控件=item.FindControl(“yourcontolid”);
然后获取相关数据库主键值,然后执行数据库更新操作. 这里这个例子有点特别,因为datagrid里面的事件直接进行了事件处理,如果只是对datagrid控件等里面控件的状态进行读取并做相应的数据库更新的话,就更简单了,比如先把所有要审核并通过而未审核的记录的checkbox选中,然后由外部的一个button来引发事件处理,这样过程就简单多了,不用动态加载事件了,现在要做的就只是对datagrid里面的checkbox进行扫描,然后根据其状态执行相应的数据库操作就可以了.
比如下面的这段代码:
private void Button1_Clicked(object sender, System.EventArgs e)
{
foreach(ListItem li in DataGrid1)
{
CheckBox mycb=( CheckBox)li.FindControl(“ChockBox1”);
If(mycb.Checked==true)
{
获取关键字,执行数据库更新操作,同上.
}
}
}
二、 让初学者为难的另一个问题就是DataList或DataGid内部绑定控件的事件处理问题 如果这里的服务器控件是页面上普通的控件的话,那很好办,在其属性窗口事件栏里对要进行绑定的事件双击就可以了。而对于DataList等控件里面的服务器却没有事件栏这一个选项。因而就有好多人就不知道怎么办了,而实际上很多人都需要这样的功能。根据我给一个朋友解决的过程来讲一下,我的朋友他对dataGrid里的每一条记录都要审核处理,因而他在每条记录里都放了一个checkbox(绑定是否已经被审核处理过),并且想要只要一点未选中的checkbox就能更新数据库。分析其过程,在他选中checkbox的时候就要去更新数据库,因而此时checkbox必须要执行回传;而且在回传时只有checkbox执行了动作并改变了状态,因而事件的触发、数据的更新也必须由它来完成,固它必须要有事件处理程序。原理就是这样子的,下面就是解决方案:
1. 设置相应checkbox的autopostback属性为true;
2.在datagrid的itemcreated事件中添加其中的checkbox事件处理,如下 private void DataList1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item)
{
CheckBox chk = (CheckBox)e.Item.FindControl("CheckBox1"); // 给项上的CheckBox添加出发事件 chk.CheckedChanged +=new EventHandler(this.CheckBox1Change);
}
}
3.在相应的事件处理方法中,如下:
private void CheckBox1Change (object sender,EventArgs e)
{
CheckBox myCheckBox = (CheckBox)sender;
int id;
if(myCheckBox.Checked == true) //判断是不是审核通过
{
id=myCheckBox.Text//这里我让更新的ID (主键)绑定到了CheckBox1的Text属性上去了.
据库处理;//省略
}
}
当然这里你也可以不让CheckBox1的Text属性来绑定主键,比如你可能让其中的其它控件来绑定主键,这样可以通过下面来访问他们.
TableCell myTableCell = (TableCell)(myCheckBox.Parent); //checkBox1的父容器,即所在行所在列的cell
DataGridItem item = (DataGridItem)myTableCell.Parent; //就是DataGrid等的一个行了
控件类型 my控件=item.FindControl(“yourcontolid”);
然后获取相关数据库主键值,然后执行数据库更新操作. 这里这个例子有点特别,因为datagrid里面的事件直接进行了事件处理,如果只是对datagrid控件等里面控件的状态进行读取并做相应的数据库更新的话,就更简单了,比如先把所有要审核并通过而未审核的记录的checkbox选中,然后由外部的一个button来引发事件处理,这样过程就简单多了,不用动态加载事件了,现在要做的就只是对datagrid里面的checkbox进行扫描,然后根据其状态执行相应的数据库操作就可以了.
比如下面的这段代码:
private void Button1_Clicked(object sender, System.EventArgs e)
{
foreach(ListItem li in DataGrid1)
{
CheckBox mycb=( CheckBox)li.FindControl(“ChockBox1”);
If(mycb.Checked==true)
{
获取关键字,执行数据库更新操作,同上.
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货