`
无恨星晨
  • 浏览: 30899 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
文章分类
社区版块
存档分类
最新评论

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事件了.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics