0

我有一个应用程序,我需要为 GridView 动态选择 SQLDataSource,以便我可以使用 2 个存储过程中的 1 个,具体取决于谁登录到系统。

我的问题是我正在使用这样的逻辑,在按钮单击...

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

谢谢!

4

3 回答 3

1

您需要在每次回发时重新绑定网格,因为您在代码中在运行时设置数据源。

将此添加到页面加载事件处理程序:

If Page.IsPostback Then
    If Session("SiteType") = "Type1" Then
       GridView1.DataSourceID = "SqlDataSource2"
    Else
       GridView1.DataSourceID = "SqlDataSource1"
    End If
    GridView1.DataBind()
End If
于 2009-11-11T20:28:04.813 回答
0

我通过简单地将选项放入 cookie 中完成此操作,并在需要时再次从 cookie 中拉下该选项。

Cookies、Session 和 ViewState 通常都以相同的方式工作。它们是一种在有限时间内持久保存信息的简单方法。您创建一个密钥,添加一个值,然后将密钥保存回您将要使用的任何介质,无论是 cookie、会话还是视图状态。当您再次需要该值时,您只需从持久介质中找到键,加载键/值对,然后通过通常将其放回某种类型的变量来访问该值。

祝你好运,希望这对一些人有所帮助。

于 2009-11-11T20:21:31.017 回答
0

我会去并将其保存为会话变量。前任。会话(“数据源”)=我的数据源

然后您将 GridView 的数据源设置为: MyGridView.datasource = session("datasource") MyGridView.bind()

那应该这样做。

希望这对大卫有所帮助。

于 2009-11-12T05:45:59.270 回答