ASP.NET-VB.NET-持久化GridView';通过多次单击按钮动态选择数据源ID

ASP.NET-VB.NET-持久化GridView';通过多次单击按钮动态选择数据源ID,.net,vb.net,gridview,viewstate,sqldatasource,.net,Vb.net,Gridview,Viewstate,Sqldatasource,我有一个应用程序,我需要为GridView动态选择一个SQLDataSource,这样我就可以使用2个存储过程中的1个,这取决于谁登录到系统 我的问题是,我使用这样的逻辑,在按钮点击 If Session("SiteType") = "Type1" Then GridView1.DataSourceID = "SqlDataSource2" Else GridView1.DataSourceID = "SqlDataSource1" End If GridView1.Data

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

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

If Session("SiteType") = "Type1" Then
     GridView1.DataSourceID = "SqlDataSource2"
Else
     GridView1.DataSourceID = "SqlDataSource1"
End If
GridView1.DataBind()
当您单击显示包含gridview的面板的按钮时,会发生这种情况

然后用户进行更改(基本上是调整网格的一个或多个留置权上的文本框),然后单击“保存”。但是,一旦发生这种情况,gridview就不再知道它的DataSourceID,因此当我尝试遍历gridview的行时,没有任何数据源ID

如果在save按钮的单击中,我输入了相同的代码,那么它(当然)会将我在表单中所做的任何数据更改清空

那么,简单地说,我如何动态地选择SqlDataSource,但只选择一次,以便程序将SqlDataSourceID与gridview关联,直到周期结束?这是ViewState的事情吗?我不完全理解ViewState

请原谅我的无知——我认为这有点简单,但我只是没有太多的.NET经验。如果有更好的方法的话,我也会很有兴趣听到的——也就是说,时间是至关重要的,所以我现在正在寻找快速解决办法(老板正在盯着我的脖子……呵呵)


谢谢

我只需将该选项放入cookie中,当我再次需要它时,从cookie中取出该选项即可

Cookie、会话和视图状态通常都是一样的。它们是在有限的时间内保持信息的一种简单方法。您创建一个密钥,添加一个值,然后将密钥保存回您将要使用的任何介质,即cookie、会话或viewstate。当您再次需要该值时,只需从perstent介质中找到密钥,加载密钥/值对,然后通过通常将其放回某个类型的变量来访问该值


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

你需要在每次回发时重新绑定网格,因为你是在运行时用代码设置数据源的

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

If Page.IsPostback Then
    If Session("SiteType") = "Type1" Then
       GridView1.DataSourceID = "SqlDataSource2"
    Else
       GridView1.DataSourceID = "SqlDataSource1"
    End If
    GridView1.DataBind()
End If

我只是去把它保存为会话变量。 前任。 会话(“数据源”)=myDataSource

然后将GridView的数据源设置为: MyGridView.datasource=会话(“数据源”) MyGridView.bind()

应该这样做

希望这对你有所帮助
David。

这可能是我正在做的,但它不在页面加载中,而是通过两次单独的按钮单击来完成-一次用于初始加载,另一次用于保存更改。然而,我第二次这样做时,在保存时,它从数据库重新加载,并清除我对行所做的更改,这是根本问题。。。我需要一种方法来动态地设置它,但在保存操作发生之后才重新绑定。(旁注:我确实在页面加载中尝试了它,但失败了,因为SqlDataSource对存储过程所需的某些数据直到完成几个步骤后才确定,所以它必须在按钮上,而不是页面加载上)实际上,您可能需要在Page Init事件的前面进行绑定。这是因为Asp.net在Init事件之后但在加载之前加载viewstate。因此,您需要在加载viewstate之前绑定网格数据,以便“维护”任何更改。您的sqldatasource数据可以保存在会话状态或Cookie中,以便在Init事件中可用。我真的不会将会话用于类似的内容。最多可以将DataSourceID存储在其中,但肯定不能像数据源那样存储复杂(且有状态)的对象。关于在会话中存储什么和不存储什么的讨论很多,但我建议尽量少使用会话,只有在没有更好的选择时才使用它。我见过很多情况下,会话的使用有代码/设计的味道,比如使用它来存储完整的数据集,在页面之间传输数据。