[黑桃六]凭借Cookie来隐藏GridView一些列后的刷新滞后的问题。按提示程度给分。
请大家仔细看看,我已经尽量简化了代码。
Button_Click事件,此按钮是“隐藏哪些列”的确认按钮
--------------------------------------------------
Dim li As ListItem
Dim v As HttpCookie
'存入Cookie
For Each li In CheckBoxList1.Items
v = New HttpCookie( "c " + li.Value)
If li.Selected = False Then
v.Value = 0
Else
v.Value = 1
End If
v.Expires = Now.AddDays(15)
Response.Cookies.Add(v)
Next
'绑定GridView1事件。
BindGV1()
BindGV1()方法
------------------------------------------
...
GridView1.Datasource=Dataset1
GridView1.DataBind()
GridView1_RowDataBound事件
-------------------------------------------
'由Cookie控制显示
Dim li As ListItem
Try
For Each li In CheckBoxList1.Items
If Server.UrlDecode(Request.Cookies( "c " + li.Value.ToString.Trim()).Value) = "0 " Then
e.Row.Cells(li.Value).Style( "display ") = "none "
Else
e.Row.Cells(li.Value).Style( "display ") = " "
End If
Next
Catch ex As Exception
End Try
以上代码是好使的。但现在的现象是:
选择隐藏哪些列后,点击确认按钮,没有任何反应。但是再点一次按钮,效果出现。
屡试不爽。
[解决办法]
将选定的设置信息放viewstate,绑定时先找viewstate有没有,有就用这个来控制隐藏,没有再取cookies
Response设置cookie,接着马上用request取cookie应该是取不到的,中间有个时间差
[解决办法]
一手拿着本子,一手握着笔,静听高手的讨论。
[解决办法]
你们全会错意了,楼主分明说的是按代码量给分
[解决办法]
为虾米我测试的 HttpResponse.Cookies HttpRequest.Cookies 是同步的?
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie hc = new HttpCookie( "Now ", DateTime.Now.ToString());
Response.Cookies.Add(hc); //
Response.Write(Request.Cookies[ "Now "].Value); //
}
[解决办法]
在同一个事件中设置cookie,接着就取cookie,此时cookie并没有送到客户端,要等所有代码执行完才会送给客户端,这时是取不出来的,而第二次点击时,上一次点击设置的cookie已经到客户端了,所以第二次可以取到
设置cookies的同时设置Viewstate, 比如ViewState[ "GridColumnSetting "] = "1=1&2=0&3=0 ";
另外IE好像有20个cookie的限制,如果Grid的列数多一点,每个列一个cookie的法子恐怕会出问题吧