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

奔泪求解!!GridView列数不固定该怎么绑定?高手都进来指点下吧!
其实还是老问题,前面发了几个求助帖了。由于自己是个菜鸟级别的程序员所以我所知道的GridView用法是前台用<%# Eval("字段")%> 然后后台用GridView1.DataSource=DataTable;GridView1.DataBind();所以很头疼的问题是列数不固定的情况下前台是没办法那样绑定字段的,那我该怎么给GridView绑定数据源上去?
  然后我想到JQuery+getJson()从一般处理程序获得StringBuilder拼接的字符,但是这下又不清楚怎么循环加到GridView1这个控件去?这时候绑定还是找GridView的ID吗?GridView1被解析成HTML代码了吗?


  其实我想实现的就是一个表格第一列是一个复选框,头部复选框选中后可以让下面的也都选中反之都不选中。然后后面接着的列有姓名、员工编号、部门、职位...最主要的是天数是动态的怎么样给GridView绑定才好。

效果如下所示:
复选框 姓名 编号 部门 职位 ... 01 02 03 ... 28 29(每个月的天数,这个是) 

复选框 张三 0203011 市场部 普通职员 ... 白天班 晚班 .................


用Winform做起来挺简单的,但用asp.net确实把我给难住了。自己技术基础不好+可能描述问题不详细所以这几天都始终没能找到解决问题的办法。这次希望大家能提供个好的办法帮小弟了了这件心事。

------解决方案--------------------
探讨
然后我想到JQuery+getJson()从一般处理程序获得StringBuilder拼接的字符,但是这下又不清楚怎么循环加到GridView1这个控件去?

------解决方案--------------------
额,好像你上个帖子我们已经说了

既然你还是不明白,干脆我们用你最熟悉的方式弄。你现在去sql版去问一个sql语句过来,直接在数据库里先排好,直接出你想要的datatable就ok,这样绑定这块你不用操心了,把gridview那个生动生成列功能设为true,绑定这块你就不用操心了,直接让gridview自己根据dt自动生成就是
------解决方案--------------------
你这个需要的解决方案是动态模板列,集成ITemplate类的一个类实例化后加入到gridview里面去
------解决方案--------------------

Dim sqlConnection1 As SqlClient.SqlConnection
Dim strCommand As New SqlClient.SqlCommand
Dim DataSet1 As New DataSet

sqlConnection1 = New System.Data.SqlClient.SqlConnection(strConnect)
sqlConnection1.Open() '打开数据库
strCommand = sqlConnection1.CreateCommand
strCommand.CommandText = 你的SQL语句
Dim sda As New SqlClient.SqlDataAdapter(strCommand)

sda.Fill(DataSet1, "TEST")
grid表名.DataSource = DataSet1.Tables("test")
ds = DataSet1
------解决方案--------------------
asp.net根据条件动态生成GridView,并动态绑定列,且可对其进行编辑的实现 
根据用户需要,一个页面中,有几个不同的button,点击不同的button,可在下方同一区域产生gridview,(当然他们的gridview是不同的)。之前用MultiView来控制,用了几个view在html中绑定了几个Gridview,然后根据点击的按钮不同,切换不同的view。但总觉得这种方式不爽~~,html代码太多,控制起来很麻烦~!
于是就想到用这种动态的方式实现。Html中只有一个div,用来放置生成的控件,其他全部在后台实现。
有一点需要注意:如果是在html中加入的控件,页面回发前后系统都会对其状态和属性做viewstate处理,所以,回发时,根据页面生命周期:页面重新初始化并加载控件实例,而后loadViewstate加载控件属性和状态,之后回发前控件状态重新出现。但是对于动态加载的控件,viewstate记住了他们的属性和状态,但是并没有存储控件本身。所以回发后,控件也就不见了~
鉴于此,有多种处理办法,但是归根到底,都需要在页面回发时的初始化状态下对动态控件重新加载。我这里所做的是在page_load事件中,对其重新加载的,当然也可以在更早的事件中做。
说明: 因为是几个不同的加载,所以这里做个一个sign标记(用的static string, 也可以用属性),从而在重新加载的时候判断到底加载哪个gridview.
废话不多说,看代码:
HTML:


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div id="list">
<asp:Button ID="btngv" runat="server" Text="生成GridView 1" onclick="btngv_Click" />
<asp:Button ID="Button1" runat="server" Text="生成GridView 2" onclick="Button1_Click" />
</div>
<div id="divshow" runat="server" >
<%...--在这里放置动态生成的gridview--%>
</div>
</div>
</form>
</body>
</html> 
CS:


using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.Htm