我有一个应用程序,我需要为GridView动态选择一个SQLDataSource,所以我可以使用2个存储过程中的一个,具体取决于谁登录到系统。
我的问题是我在按钮点击中使用这样的逻辑......
If Session("SiteType") = "Type1" Then
GridView1.DataSourceID = "SqlDataSource2"
Else
GridView1.DataSourceID = "SqlDataSource1"
End If
GridView1.DataBind()
当您单击显示其中包含gridview的面板的按钮时,会发生这种情况。
然后用户进行更改(基本上调整网格的一个或多个留置上的文本框),然后单击“保存”。但是,一旦发生这种情况,gridview就不再知道它的DataSourceID,所以当我尝试浏览gridview的行时 - 没有。
如果在保存按钮的单击中,我输入相同的代码,它(当然)会消除我在表单中所做的任何数据更改。
所以,简单地说 - 如何动态选择SqlDataSource,但只有一次,以便程序保持与gridview关联的SqlDataSourceID直到循环结束?这是一个ViewState的东西吗?我不完全理解ViewState ......
请原谅我的无知 - 我假设这很简单,但我只是没有大量的.NET经验。如果有更好的方法,我也有兴趣听到这一点 - 那说,时间是至关重要的所以我现在正在寻找快速解决方案(老板正在我的脖子上呼吸......嘿) 。谢谢!
答案 0 :(得分:1)
您需要在每次回发时重新绑定网格,因为您在运行时通过代码设置数据源。
将此添加到页面加载事件处理程序:
If Page.IsPostback Then
If Session("SiteType") = "Type1" Then
GridView1.DataSourceID = "SqlDataSource2"
Else
GridView1.DataSourceID = "SqlDataSource1"
End If
GridView1.DataBind()
End If
答案 1 :(得分:0)
我已经通过简单地将选项放入cookie中来完成此操作,当我需要它再次从cookie中删除该选项时。
Cookies,Session和ViewState通常都是一样的。它们是在有限的时间内保持信息的简单方法。您创建一个密钥,添加一个值,然后将密钥保存回您将要使用的媒体,无论是cookie,会话还是视图状态。当您再次需要该值时,只需从持久介质中找到键,加载键/值对,然后通过将其放回某个类型的变量中来访问该值。
祝你好运,并希望这有助于一些人。答案 2 :(得分:0)
我会去并将其保存为会话变量。 防爆。 会话(“datasource”)= myDataSource
然后按如下方式设置GridView的数据源: MyGridView.datasource = session(“datasource”) MyGridView.bind()
应该这样做。
希望这有帮助' 大卫。