iSeller Commerce
iSeller POS Retail
iSeller POS F&B
iSeller POS Express
Crosslight
WebUI
ClientUI
What's New
Download Trial
Web Solution
Mobile Solution
Enterprise Solution
Custom Development
Blog
Community
Latest Development Blogs
ForumPostTopic
Browse By Tag
Hi,
I am trying to implement webgrid but the problem exists when I'm binding it to datasource. I have a stored procedure that returns some data.However, I don't know how many columns will be returned in that procedure, but I know the names of all columns that can be returned. So what I wanted to do, is to define all possible columns in aspx page, and in server-side PrepareDataBinding method remove columns from webgrid's column collection that don't have their match in datasource datatable that I'm binding it to.
This doesn't really work as I get an error stating that columne "XYZ" which is defined in aspx can't be found in datasource, although it was removed (I checked with debugger) in PrepareDataBinding event handler.
I presume this then is not possible, or am I wrong? The reason I am not creating columns from codebehind is simply that I would have to check datasource for every column to see if it exists and then create that column dynamically and add it to the column collection of webgrid. We did that in old version of our application and that PrepareDataBinding method has over 1600 lines of code, so I am looking for a better way of doing this. Please help me for the love of god!
This is my PrepareDataBinding method (column named "Check" is rowchecker column so i don't want it removed):
Dim dt As DataTable = CType(e.DataSource, DataTable) Dim grid As WebGrid = CType(sender, WebGrid) Dim colName As String For Each col As WebGridColumn In grid.RootTable.Columns colName = col.DataMember If Not colName = "Check" AndAlso Not dt.Columns.Contains(colName) Then grid.RootTable.Columns.Remove(col) End If Next
Hi Nikola,
Actually, you can get the structure of your DataTable and apply it on WebGrid in PrepareDataBinding event by using RetrieveStructure function. You can also remove the column that you don't want to show after retrieved the structure from your DataTable. With this method, you don't have to declare WebGridColumn inside WebGrid at the first time. I've made you a sample that using this scenario to apply the structure into WebGrid. I attach the sample here. Could you look for my sample and tell me if this sample achieve your scenario or no?
Regards,Bernard
Hi Bernard,
thank you for your answer. This does work, sort of. I get all the columns that I have in my datasource. However, I have some columns that I don't want to show in the grid, so their width is set to 0px(I can't hide them with visible=false because I need their data), they have some data formating options defined also, and I'm defining all of that in aspx. So what i really want is to show only those columns contained in datasource, but with the options that I already defined in markup, and hide all the other columns. What I succeded to do is to check if column is not contained in datasource and just set it's Bound and Visible properties to false. With that all other columns defined in markup, and contained in datasource are binded and their properties are preserved as defined in aspx. I would want to know if there's a better option for doing this. If I do it as you suggested, then i still have to define all properties in PrepareDataBinding event.
You can achieve this Maybe for this scenario you can use HiddenDataMember property to hide DataMember in other column. Then you can set Visibility of that column to false. I attach the simple sample here. Could you look in my sample and tell me if this sample achieve your scenario or no? Look forward to hear any feedback from you so I can help you further.
I have 160 columns, I can't do that for all of them. That's what we did in previous version of application, and that was 2000 lines of code. So there has to be a better way.
or
Choose this if you're already a member of Intersoft Community Forum. You can link your OpenID account to your existing Intersoft Social ID.
Choose this if you don't have an Intersoft account yet. Your authenticated OpenID will be automatically linked to your new Intersoft account.
Enter your Wordpress Blogname