![]() | |
![]() |
| | Thread Tools | Search this Thread | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Sometimes, you call DataGrid.DataBind() after doing a DataGrid.DataSource = DataSet (or reader) and sometimes you don't. When is it that you have to call DataBind on the datagrid and when is it not necessary? Why is there the difference? |
#3
| |||
| |||
|
|
Scott M. wrote: You should call Databind on a DataGrid after any modifications to the grid's data source (record added, deleted, updated, etc.) As for sometimes calling databind after setting the data source and sometimes not...Who said you should not be databinding after setting the data source? What you don't do is call DataBind in the Postback section of Page_Load. The reason being is that the page is being reloaded for a reason. It could have been that the user switch the page of data they want to see, the user may have initiated a sort, the user may have deleted a row or updated a row. All of these actions will force a postback. Page_Load will run early on in the Postback process, so you'll want to set your datasource for your grid up there, but don't databind here, because after Page_Load, the event that caused the postback is going to fire (say the SortCommand event, for example). If you bind in the Page_Load and then the SortCommand event fires, you'd have to call DataBind again in the SortCommand event (because you just changed what the grid is showing). So, on Postback's, you re-set the grid's datasource in Page_Load, but put the Databind in the grid's event handlers. "Water Cooler v2" <wtr_clr (AT) yahoo (DOT) com> wrote in message news:1149540251.830751.94550 (AT) u72g2000cwu (DOT) googlegroups.com... Sometimes, you call DataGrid.DataBind() after doing a DataGrid.DataSource = DataSet (or reader) and sometimes you don't. When is it that you have to call DataBind on the datagrid and when is it not necessary? Why is there the difference? Who said you should not be databinding after setting the data source? After setting a datasource, if i use the data adaptor's fill() command to fill the dataset (which is the datagrid's datasource) there seems to be no need for a databinding. I've been wondering what it actually does, being i seem not to need it. B. |
#4
| ||||||||||
| ||||||||||
|
|
I think i will disagree with that. (Please correct me if i'm wrong!) The in-memory representation, is actually an in memory copy. The difference being, the copy changes, the original does not. And, this copy is a datatable, not a dataset. A dataset is the container for one or many datatables, however. (As well as dataviews and datarelations.) |
|
The original data needs to be replicated into the in-memory container (the DataSet). This is accomplished by calling the .Fill() method of your DataAdapter. Which just runs the .SelectCommand command. It would have been *much* more clear had they named it "ExecuteSelectCommand" or "SelectCommandResultsInto" |
|
Now, the DataGrid needs to be "connected" to the in-memory data (the DataSet). It actually needs to be connacted to the dataview. If connected to the dataset, it just shows a plus-sign which expands into the availible dataviews, of which one must be selected to show any data. |
|
Further, connecting it to a dataset leaves those arrows on the caption bar. Connecting it directly to the dataview, however, does not. |
|
You must set the DataGrid's datasource property so it knows where to get the data from, but just setting the datasource doesn't actually go and get any data. Yep, that confused me at first. Which is when i realized that the datagrid has absolutely nothing to do with a dataadaptor. A datagrid is a window into the dataview. |
|
A dataview is the resultset of a datatable (as opposed to the design). A datatable can be filled in many ways. One way is with a select statement. One way to run a select statement is via the Fill() command of a dataadaptor. |
|
So, you need to call the DataGrid's DataBind method to tell the grid to go and look at the data (specified in the DataSource property) and bind to it. When it is set it looks. Databind is not needed, as i expreessed earlier. |
|
If the data in the DataSet ever gets changed in any way, or if you want to show the existing data in a different way (a different page of data or a different sorted view of the data), you are going to need to have the DataGrid "refresh" its representation of that underlying data. Calling DataBind does just that. Actually, calling datagrid.refresh does that. |
|
I still see no reason for databind. |
|
As a note, calling Fill() works both before and after setting the datagrid's datasource. That is, the FIll() command triggers the datagrid to refresh. However, using .Expression() does not. If done before the datasource is set, it shows the modified data, doing it after the datasource is set, requires a datagrid.refresh for it to be noticed. Anyway, i see datagrid.databindings which requires me a to enter a property name. I am a bit confused over exactly what this is. BTW, i appreciate the help in clarifying this. I've got to read, clarify, and test to figure this whole thing out. I'm still a bit confused. |
#5
| |||
| |||
|
|
Well, not always. A DataGrid is a window into the in-memory representation of the original data. It could be a DataView or it could be a DataTable directly or it could be a DataSet that holds a DataTable. Original? Why? AFAIK, the datagrid can change the data, now having two sets, that are the orignal and the modified, and the datagrid shows the modified. |
#6
| |||
| |||
|
| Originally Posted by Scott M. You should call Databind on a DataGrid after any modifications to the grid's data source (record added, deleted, updated, etc.) As for sometimes calling databind after setting the data source and sometimes not...Who said you should not be databinding after setting the data source? What you don't do is call DataBind in the Postback section of Page_Load. The reason being is that the page is being reloaded for a reason. It could have been that the user switch the page of data they want to see, the user may have initiated a sort, the user may have deleted a row or updated a row. All of these actions will force a postback. Page_Load will run early on in the Postback process, so you'll want to set your datasource for your grid up there, but don't databind here, because after Page_Load, the event that caused the postback is going to fire (say the SortCommand event, for example). If you bind in the Page_Load and then the SortCommand event fires, you'd have to call DataBind again in the SortCommand event (because you just changed what the grid is showing). So, on Postback's, you re-set the grid's datasource in Page_Load, but put the Databind in the grid's event handlers. "Water Cooler v2" <wtr_clr (AT) yahoo (DOT) com> wrote |
#7
| |||
| |||
|
#8
| |||
| |||
|
|
Scott M. wrote: Well, not always. A DataGrid is a window into the in-memory representation of the original data. It could be a DataView or it could be a DataTable directly or it could be a DataSet that holds a DataTable. Original? Why? AFAIK, the datagrid can change the data, now having two sets, that are the orignal and the modified, and the datagrid shows the modified. But after modifying the datagrid (which modifies the in-memory representation of the original data) wouldn't you want that in-memory representation to update the original data (thereby putting the two back in sync)? If the user likes the changes, yes. Otherwise, no. B. |
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
| |