日期:2014-05-18  浏览次数:20371 次

对datagrid的操作,马上结帐
前提:在datagrid   中我加了一个   模版列,   模版列里面放一个LinkButton  

问题:我想点击   某行的   LinkButton   时,改行会执行
(update   aa   set   bb=1   set   id= '行号 ')




------解决方案--------------------
在前台给你的LinkButton给个CommandName 比如说 XXX
在后台的ItemCommand事件中进行判断

private void DataGrid1_ItemCommand(object source, DataGridCommandEventArgs e)
{
if(e.CommandName == "XXX ")
{
SqlConnection cn = new SqlConnection( connectionString);
string strUpdate = "update aa set bb=1 set id=@id ";
SqlCommand cmd = new SqlCommand(strUpdate, cn );
//记得在前台设置DataGrid的DataKeyField为aa表的主键字段
cmd.Parameters.Add( "@id ", SqlDbType.VarChar).Value = DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
DataGrid1.EditItemIndex = -1;
BindDataGrid(); //这个是重新邦定DataGrid的方法
}
}


------解决方案--------------------
楼上的大哥似乎没看清楚别人的要求,不知道是不是lz没有描述对
我想点击 某行的 LinkButton 时,改行会执行--------当改行的时候才执行,不是点击执行!
(update aa set bb=1 set id= '行号 ')
------解决方案--------------------
用户的需求都是合理的,因为用户就是上帝,哈:)
------解决方案--------------------
1:CommandName ----字面意思就是命令名称,因为datagrid的里面的控件引发的事件都是冒泡的,所以linkbutton按钮的单击事件会冒泡到itemcommand里面,又因为可能会有多个不同的按钮引发单击事件比如删除,更新,取消等作用的linkbutton,那么可以用commandname标识应该是哪个按钮引发的事件(不太准确,但是可以这样理解),这样方便你写具体的事件处理代码
2:cmd.Parameters.Add( "@id ", SqlDbType.VarChar).Value = DataGrid1.DataKeys[e.Item.ItemIndex].ToString();这个是用存储过程的参数来执行sql语句,也可以直接将commandtext=sql,然后执行sql语句,不过这样会有sql注入漏洞
3: DataGrid1.EditItemIndex = -1;如果你使用的是datagrid默认的更新取消,编辑,那么这个语句是用来取消编辑状态,如果你用的不是这样的模式,你可以不要
------解决方案--------------------
记得在url里带上该行的指定参数!
如 "a.aspx?id= "+Eval( "id ")+