ASP.NET - VB.NET - 通过多次按钮点击,坚持GridView动态选择的DataSourceID

时间:2009-11-11 20:13:33

标签: .net vb.net gridview viewstate sqldatasource

我有一个应用程序,我需要为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经验。如果有更好的方法,我也有兴趣听到这一点 - 那说,时间是至关重要的所以我现在正在寻找快速解决方案(老板正在我的脖子上呼吸......嘿) 。

谢谢!

3 个答案:

答案 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()

应该这样做。

希望这有帮助' 大卫。