关于Gridview自动生成列后,手动设定的模板列位置问题解决方案
2009-11-26 18:54
483 查看
关于在Gridview中使用AutoGenerateColumns="true"后模板列总是排在第一列的处理。
情况说明:有人也许会觉得好笑,直接在Gridview中编辑列然后设定好数据,最后再放模板列不就OK了,不过,这里要说明下,有时候不使我们偷懒不想设定,而是没有办法设定
在这里,返回的数据源是ArrayList(实体类还是动态生成的)也好,DataTable(存储过程多表查询平凑的数据)也罢,里面有多少列数据都是从法知道的,这种情况
肯定是不能手动在Gridview中指定BoundFiled了。
好了,废话不多说,这里没有好的处理方法,只是用js做了下障眼法而已。
分析:也曾想过在后台动态添加模板列,但是一直没有好的效果。最后干脆就在页面加载完成后处理,大家也都看过页面的html源代码,Gridview最后生成的是一个Table而已,那
我们就从Table下手,我们可以把第一列隐藏起来,然后在每一行后面添加一列,也就是把第一列copy到最后一列。下面就行动吧。
Code如下:
页面代码:
后台代码:
关于动态类的创建,在后期也会贴上来,同时还有一个js版的用户自定义显示列的动能(尚未测试)
如有更好的方法,欢迎批评指正,谢绝无聊跟帖与留言。
新修改:在window.onload=function()里
if(tb.rows[i].cells.length<=1) break;//防止分页出现tb.rows[i].cells[0]为空情况,这里要看分页怎么做,然后做相应的修改
获取GridView的Id 可以直接用<%= GridView1.ClientID %>
情况说明:有人也许会觉得好笑,直接在Gridview中编辑列然后设定好数据,最后再放模板列不就OK了,不过,这里要说明下,有时候不使我们偷懒不想设定,而是没有办法设定
在这里,返回的数据源是ArrayList(实体类还是动态生成的)也好,DataTable(存储过程多表查询平凑的数据)也罢,里面有多少列数据都是从法知道的,这种情况
肯定是不能手动在Gridview中指定BoundFiled了。
好了,废话不多说,这里没有好的处理方法,只是用js做了下障眼法而已。
分析:也曾想过在后台动态添加模板列,但是一直没有好的效果。最后干脆就在页面加载完成后处理,大家也都看过页面的html源代码,Gridview最后生成的是一个Table而已,那
我们就从Table下手,我们可以把第一列隐藏起来,然后在每一行后面添加一列,也就是把第一列copy到最后一列。下面就行动吧。
Code如下:
页面代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>无标题页</title> <mce:script type="text/javascript" language="javascript"><!-- //由于加上MasterPage后Gridview生成的Table的ID会变化,这里加上一个方法获取生成的Table的ID function getGridViewId()//获取Gridview的ID { var id; var tb = document.getElementsByTagName("table"); for(var i=0;i<tb.length;i++) { if(tb[i].id.indexOf("GridView1")!=-1) { id = tb[i].id; break; } } return id; } //页面加载完成后隐藏第一列,同时在每一行增加一列 window.onload=function() { var tb = document.getElementById(getGridViewId());//获取Table for(var i=0;i<tb.rows.length;i++)//循环Table每一行 { if(tb.rows[i].cells.length<=1) break;//防止分页出现tb.rows[i].cells[0]为空情况,这里要看分页怎么做,然后做相应的修改 var firsttd = tb.rows[i].cells[0].cloneNode(true);//克隆第一列(模板列) var newtd = tb.rows[i].insertCell();//插入一个新列 newtd.replaceNode(firsttd);//把新列用克隆的第一列置换掉 tb.rows[i].cells[0].style.display="none";//隐藏第一列 tb.rows[i].cells[tb.rows[i].cells.length-1].style.display="block";//设定新列显示(该代码是我项目的需要,和该功能没什么联系) } } // --></mce:script> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" DataSourceID="ObjectDataSource1" Width="100%" OnRowCommand="GridView1_RowCommand"> <Columns> <asp:TemplateField HeaderText="测试"> <ItemTemplate> <asp:LinkButton ID="LinkButton1" CommandName="kk" runat="server">LinkButton</asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetRecordDS" TypeName="TestDAL"></asp:ObjectDataSource> <br /> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </div> </form> </body> </html>
后台代码:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "kk") this.Label1.Text = "哈哈,测试成功啦!Oh,Yes!"; }
关于动态类的创建,在后期也会贴上来,同时还有一个js版的用户自定义显示列的动能(尚未测试)
如有更好的方法,欢迎批评指正,谢绝无聊跟帖与留言。
新修改:在window.onload=function()里
if(tb.rows[i].cells.length<=1) break;//防止分页出现tb.rows[i].cells[0]为空情况,这里要看分页怎么做,然后做相应的修改
获取GridView的Id 可以直接用<%= GridView1.ClientID %>
相关文章推荐
- 关于GridView中动态生成模板列的问题
- 关于fancybox大图片显示位置不准确的问题解决方案
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于远程桌面连接阿里云服务器ECS出现的卡顿、自动退出问题的解决方案
- hibernate中关于数据库方言导致不能自动生成数据库表的问题
- 关于Linux下I2C驱动的Probe方式没有自动生成i2c_client且没有自动调用i2c_driver的.probe指向的函数的问题解决
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于Oracle字段类型Date使用mybatis generator自动生成工具出现的查询日期只精确到年月日问题
- 关于linq 的dbml自动生成的表对象带s和不带s的问题
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- Android ScrollView嵌套GridView或者ListView的时候,页面自动滚动到GridView或者ListView所在位置的问题
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于myeclipse无法自动生成Deploy Location的解决方案
- 关于无法加载已创建的布局文件的问题的解决方案以及已布局在对应的R文件中未生成相应ID的问题的解决
- 关于后台生成的模板列的数据绑定问题
- asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案
- 解决ScrollView中嵌套ListView或GridView导致的ScrollView自动滚动到ListView或GridView位置的问题