开发者

ASP.NET - VB.NET - Persist a GridView's dynamically chosen DataSourceID over multiple button clicks

开发者 https://www.devze.com 2022-12-10 23:34 出处:网络
I have an app where I need to dynamically choose an SQLDataSource for a GridView so I can use 1 of 2 stored procedures, depending on who is logged into the system.

I have an app where I need to dynamically choose an SQLDataSource for a GridView so I can use 1 of 2 stored procedures, depending on who is logged into the system.

My problem is that I am using logic like this, in the button click...

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

This happens when you click the button that reveals the panel with the gridview in it.

The user then makes changes (basically adjusting a text box on one or more liens of the grid) and then clicks "save". However, the gridview no longer knows its DataSourceID once this happens, so when I try to go through the gridview's rows - there are none.

If, in the save button's click, I put the same code, it (of course) blanks out any of the data changes I made in the form.

So, simply put - how do I dynamically choose the SqlDataSource, but only one time, so that the program then keeps that SqlDataSourceID associated with the gridview until the end of the cycle? Is this a ViewState thing? I don't totally understand ViewState...

Pardon my ignorance - I'm assuming this is kind of simple, but I just don't have a ton of .NET experience. If there is a better way, I'd be interested in hearing that as well - that said, time is of the essence so I'm kind of looking for the quick fix 开发者_如何学Goright now (boss is breathing down my neck.. heh).

Thanks!


You need to rebind the grid on each postback because you are setting the datasource at runtime in code.

Add this to the pages load event handler:

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


I've done this by simply putting the option into a cookie and when I need it again pulling that option down from the cookie.

Cookies, Session and ViewState all generally work the same. They are a simple way of persisting information for a limited amount of time. You create a key, you add a value and then save the key back to what ever medium you are going to use be it a cookie, session or viewstate. When you need the value again, you just find the key in from the perstent medium, load the key/value pair and then access the value by ususally putting it back into a variable of sometype.

Good luck, and hope this helps some.


I would just go and and save it as a session variable. Ex. Session("datasource") = myDataSource

Then you set your GridView's datasource as such: MyGridView.datasource = session("datasource") MyGridView.bind()

That should do it.

Hope this helps' David.

0

精彩评论

暂无评论...
验证码 换一张
取 消