js全局变量的应用-GridView单击行的任意列会自动选中此行

这文章为转载。。。。。

起因是这样的,我做了一个控件,这里面

包含了一个gridview控件,上面有选择按钮,但是我想不显示选择列点击行上的任意处都执行"选择"任务,在一般的页面里加下面代码就可以了

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Header)
{
//e.Row.Cells[5].Visible = false;
//当鼠标停留时更改背景色
e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;this.style.backgroundColor='#ffffe7'");
//当鼠标移开时还原背景色
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c");
//单击行的任意列会自动选中此行
e.Row.Attributes.Add("onclick", "__doPostBack('GridView1','Select$" e.Row.RowIndex "')");
}
}

但是注意,我是做的用户控件,当控件被托拽到别的页面上的时候,控件里面用的服务器控件都会加一个本用户控件名子的前缀,这就出现问题了在

"e.Row.Attributes.Add("onclick", "__doPostBack('GridView1','Select$" e.Row.RowIndex "')");"中在新页面上的'GridView1'存在,但是叫做另一个名子了,就是比如控件叫"WebUserControl",那么在新的引用页里他就叫"WebUserControl1",原来的GridView1就叫做WebUserControl1_GridView1了,这时候,里面的选择按钮列增加onclick的事件的行就叫"WebUserControl1$GridView1"了,也就是说这样写才有效"e.Row.Attributes.Add("onclick", "__doPostBack('WebUserControl1$GridView1','Select$" e.Row.RowIndex "')");",但是问题是如果这样写死的话,如果是页面上引用两个这样的控件,就会出问题了,第二个控件叫做WebUserControl2,但是它上面的事件已经被固定了,所以第二个会不起做用,也就是说页里只能用一个控件,那做这个控件就没有意义了,我解决的办法是,引用了前台javascript的全局变量

<script type="text/javascript">
//这里如果div变成服务器端运行,那么在页里设置的样式都失效,只能在控件本上上设置,js程序在其它控件被调用后会失效
var ctrlid="null";
function tbMachineShwo(){//这个函数在控件里用一个按钮触发
ctrlid=event.srcElement.id.substr(0,15) "$GridView1";//意思就是取出这个控件在页里的id

}

</script>

然后在后台页里这样写

e.Row.Attributes.Add("onclick", "__doPostBack(ctrlid,'Select$" e.Row.RowIndex "')");

这样就能在点击任意处都加上这个onclick事件了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值