奔泪求解!!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确实把我给难住了。自己技术基础不好+可能描述问题不详细所以这几天都始终没能找到解决问题的办法。这次希望大家能提供个好的办法帮小弟了了这件心事。
[解决办法]
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
...{
GridView gvshow=null;
public static string sign;
protected void Page_Load(object sender, EventArgs e)
...{
if (sign != null) //根据标记符号来判断,重新绑定那个控件
...{
if (sign == "gv1")
setBind();
else
setBind2();
}
}
public void setBind()
...{
DataTable dt = getDataTable(); //获得数据源
gvshow = new GridView();
gvshow.Width = Unit.Pixel(700);
gvshow.AutoGenerateColumns = false;
gvshow.RowEditing += new GridViewEditEventHandler(gvshow_RowEditing); //添加编辑事件
gvshow.RowDeleting +=new GridViewDeleteEventHandler(gvshow_RowDeleting);
gvshow.DataSource = dt;
for (int i = 0; i < dt.Columns.Count; i++)
...{
BoundField bc = new BoundField();
bc.DataField = dt.Columns[i].ColumnName.ToString();
bc.HeaderText = dt.Columns[i].Caption.ToString();
gvshow.Columns.Add(bc);
}
CommandField cf = new CommandField();
cf.ButtonType = ButtonType.Link;
cf.ShowEditButton = true;
cf.CausesValidation = false;
gvshow.Columns.Add(cf);
CommandField cf2 = new CommandField();
cf2.ButtonType = ButtonType.Link;
cf2.ShowDeleteButton = true;
cf2.CausesValidation = false;
gvshow.Columns.Add(cf2);
gvshow.DataBind();
divshow.Controls.Add(gvshow);
}
public void setBind2()
...{
DataTable dt = getDataTable(); //获得数据源
gvshow = new GridView();
gvshow.Width = Unit.Pixel(700);
gvshow.AutoGenerateColumns = false;
gvshow.RowDeleting +=new GridViewDeleteEventHandler(gvshow_RowDeleting); //添加删除事件
gvshow.DataSource = dt;
for (int i = 0; i < dt.Columns.Count; i++)
...{
BoundField bc = new BoundField();
bc.DataField = dt.Columns[i].ColumnName.ToString();
bc.HeaderText = dt.Columns[i].Caption.ToString();
gvshow.Columns.Add(bc);
}
CommandField cf = new CommandField();
cf.ButtonType = ButtonType.Link;
cf.ShowDeleteButton = true;
cf.CausesValidation = false;
gvshow.Columns.Add(cf);
gvshow.DataBind();
divshow.Controls.Add(gvshow);
}
void gvshow_RowDeleting(object sender, GridViewDeleteEventArgs e)
...{
int i = e.RowIndex;
Response.Write("delete:" + gvshow.Rows[i].Cells[0].Text.ToString());
}
protected void btngv_Click(object sender, EventArgs e) //条件选择后,点击生成按钮,生成特定的gridview
...{
divshow.Controls.Clear();
setBind();
sign = "gv1";
}
public void gvshow_RowEditing(object sender, GridViewEditEventArgs e)
...{
int i = e.NewEditIndex;
string id = gvshow.Rows[i].Cells[0].Text.ToString();
Response.Write("you want to edit"+id);
}
public DataTable getDataTable()
...{
DAL.ISDApp01 cDal = new DAL.ISDApp01();
string sql = "select * from test";
DataTable dt = cDal.ExecuteQuery(sql).Tables[0];
return dt;
}
protected void Button1_Click(object sender, EventArgs e)
...{
divshow.Controls.Clear();
setBind2();
sign = "gv2";
}
}