C# Page.DataBind需要注意的问题
今天在制作一个用户自定义控件的时候,由于使用了Page.DataBind功能,导致所有的数据全部都绑定了同样的数据,自己对Page.DataBind了解不到家,调式了半天才发现是这个方法导致的问题,郁闷。。。
代码结构大概如下
后台代码
前台html代码
以前给前台JS代码赋后台变量的值时,都是按照asp的方法,使用<%=变量名称%>。后面看了一个帖子,可以使用Page.DataBind来绑定后台变量的值,发现还蛮好用的,也符合asp.net的编程习惯,<%= %>此种形式的代码毕竟还是asp的形式。
所以今天制作用户自定义控件的时候,也使用了Page.DataBind,结果repeater控件都绑定了一样的数据,原来调用Page.DataBind时将子控件也重新绑定了,由于数据源使用了DataView+RowFileter来生成,所以Page.DataBind后repeater重新绑定最后一次RowFilter好的数据,所以都是一样的,+_+。
原创文章,转载请注明出处:C# Page.DataBind需要注意的问题
代码结构大概如下
后台代码
+展开
-C#
protected int blockId=0;
public void init(DataView dv){
Repeater rp;
for(int i=0;i<5;i++){
rp = (Repeater)this.FindControl("rp" + i);//查找repeater
dv.RowFilter="continentid=" + i;//设置RowFilter
rp.DataSource=dv; rp.DataBind(); //绑定数据
}
this.DataBind();//绑定前台变量blockId,我以为只是绑定后台申明的全局变量,原来是连所有子控件,包括repeater都重新绑定了,所以最后repeater的数据源都一样,为最后一次的RowFileter好的数据
}
public void init(DataView dv){
Repeater rp;
for(int i=0;i<5;i++){
rp = (Repeater)this.FindControl("rp" + i);//查找repeater
dv.RowFilter="continentid=" + i;//设置RowFilter
rp.DataSource=dv; rp.DataBind(); //绑定数据
}
this.DataBind();//绑定前台变量blockId,我以为只是绑定后台申明的全局变量,原来是连所有子控件,包括repeater都重新绑定了,所以最后repeater的数据源都一样,为最后一次的RowFileter好的数据
}
前台html代码
+展开
-HTML
<script type="text/javascript">
var blockId='<%#blockId %>';//=====全局变量绑定script>
var blockId='<%#blockId %>';//=====全局变量绑定script>
以前给前台JS代码赋后台变量的值时,都是按照asp的方法,使用<%=变量名称%>。后面看了一个帖子,可以使用Page.DataBind来绑定后台变量的值,发现还蛮好用的,也符合asp.net的编程习惯,<%= %>此种形式的代码毕竟还是asp的形式。
所以今天制作用户自定义控件的时候,也使用了Page.DataBind,结果repeater控件都绑定了一样的数据,原来调用Page.DataBind时将子控件也重新绑定了,由于数据源使用了DataView+RowFileter来生成,所以Page.DataBind后repeater重新绑定最后一次RowFilter好的数据,所以都是一样的,+_+。
加支付宝好友偷能量挖...
原创文章,转载请注明出处:C# Page.DataBind需要注意的问题