求教C#高手,gridview动态绑定数据后,修改了表头的文本后,就无法自动排序。
求教C#高手,gridview动态绑定数据后,修改了表头的文本后,就无法自动排序。具体就是,先绑定gridview的数据源,后通过for(intj=0;j<GridVie...
求教C#高手,gridview动态绑定数据后,修改了表头的文本后,就无法自动排序。
具体就是,先绑定gridview的数据源,后通过
for (int j = 0; j < GridView1.HeaderRow.Cells.Count-1; j++)
{
GridView1.HeaderRow.Cells[j].Text = ufdt.Tables["t1"].Rows[0][j + 2].ToString();
}
设定了表头的文本。为什么没有设定表头文本,就可以自动排序(自动排序的方法是自己写的,gridview的数据源是动态bind的),设定了表头的文本后,自动排序功能就消失了。最主要的是,表头的文本都是不可单击的。 展开
具体就是,先绑定gridview的数据源,后通过
for (int j = 0; j < GridView1.HeaderRow.Cells.Count-1; j++)
{
GridView1.HeaderRow.Cells[j].Text = ufdt.Tables["t1"].Rows[0][j + 2].ToString();
}
设定了表头的文本。为什么没有设定表头文本,就可以自动排序(自动排序的方法是自己写的,gridview的数据源是动态bind的),设定了表头的文本后,自动排序功能就消失了。最主要的是,表头的文本都是不可单击的。 展开
2012-04-22 · 知道合伙人互联网行家
zhuxinjun1982
知道合伙人互联网行家
向TA提问 私信TA
知道合伙人互联网行家
采纳数:2145
获赞数:8329
毕业于上海行健职业学院,大专学历;2007~2009在北大青鸟进修网络编程课目。现任网络主管,平时爱好上网。
向TA提问 私信TA
关注
展开全部
如果你的排序函数是写在前台的,可以通过以下函数为标题添加单击事件。
this.GridView1.HeaderRow.Cells[3].Text = "zxj";
this.GridView1.HeaderRow.Cells[3].Attributes.Add("onclick", "test()");//test为前台的JS函数。
如果你是写在后台的,那就在前台这个函数中回调后台函数,不过这样实现起来比较复杂,具体我也写不出来,不过肯定是能实现的。
但是个人觉得就个排序功能没必要弄的这么复杂啊。而且GRIDVIEW自带排序功能的。
你可以把标题列也直接绑定数据啊,然后自动打开GRIDVIEW的排序功能就可以了啊。
this.GridView1.AllowSorting = true;//设置GridView的AllowSorting属性为TURE即可实现排序功能了。
this.GridView1.HeaderRow.Cells[3].Text = "zxj";
this.GridView1.HeaderRow.Cells[3].Attributes.Add("onclick", "test()");//test为前台的JS函数。
如果你是写在后台的,那就在前台这个函数中回调后台函数,不过这样实现起来比较复杂,具体我也写不出来,不过肯定是能实现的。
但是个人觉得就个排序功能没必要弄的这么复杂啊。而且GRIDVIEW自带排序功能的。
你可以把标题列也直接绑定数据啊,然后自动打开GRIDVIEW的排序功能就可以了啊。
this.GridView1.AllowSorting = true;//设置GridView的AllowSorting属性为TURE即可实现排序功能了。
展开全部
这要看你自动排序的函数是怎么写的了,调试一下设置文本和设置自动排序函数的执行顺序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
表头文本的修改,应该是这样的:
1.非排序列,直接复制即可,就像楼主用的方法
2.排序列,需要这样做:
for (int j = 0; j < GridView1.HeaderRow.Cells.Count-1; j++)
{
LinkButton btn=GridView1.HeaderRow.Cells[j].Controls[0] as LinkButton;
btn.Text = ufdt.Tables["t1"].Rows[0][j + 2].ToString();
}
1.非排序列,直接复制即可,就像楼主用的方法
2.排序列,需要这样做:
for (int j = 0; j < GridView1.HeaderRow.Cells.Count-1; j++)
{
LinkButton btn=GridView1.HeaderRow.Cells[j].Controls[0] as LinkButton;
btn.Text = ufdt.Tables["t1"].Rows[0][j + 2].ToString();
}
更多追问追答
追问
按你说的方法,为什么会有一个错误提示呢?
指定的参数已超出有效值的范围。 参数名: index
(数据时动态的,设置表头的方法放在 protected void GridView1_DataBound(object sender, EventArgs e)中)
当然也试过放在数据绑定的方法之后。结果都是这个错误提示。
追答
我试验了一下,应该这样:
for (int j = 0; j < GridView1.HeaderRow.Cells.Count-1; j++)
{
DataControlField df = GridView1.Columns[j] as DataControlField;
df.HeaderText = ufdt.Tables["t1"].Rows[0][j + 2].ToString();
}
这样应该就OK拉~~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每次重绑之后都要把表头重新修改吧,你试试吧,最还别这样,干嘛要该表头,直接把绑定的DataTable的Columns名称改掉就行了呗,或者是把GridView的Header的名称改掉就行了呗,只要显示出来一样的就行了,管他后台是什么字段呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-04-24
展开全部
自动生成列时候不能该表头名字,否则自动排序功能消失。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询