Hi
I'm using a WebDropDown with an ItemTemplate that renders multiple columns from an underlying datasource, just like shown in the video from craigshoemaker. I've set the AutoPostback property to true. Everything loads well when I run the page. When I select a value the page does a postback (as desired).But now all the items from the WebDropDown are empty, however the template-layout is still applied and the Value and Text properties are still filled up.It seems that the DataItems get null, because they're not being saved in the ViewState?
Is this normal behavior? The only workaround I can find is to DataBind the control on every postback.
I've attached a sample project (VB.NET and version 9.1.20091.2040)
Hi Angel
On one hand I can understand that's not being saved in the ViewState (it would get bloated), on the other hand if you would use multiple WebDropDown-controls that binds on every postback (for instance if they were cascaded), you would also get a performance issue, not?
Anyway thanks for your help.
Kind regards
Kevin
Hi Kevin,
If you disable ViewState (EnableViewState=false), and do DataBind on every postback, I think there shouldn't be any noticeable performance hit.
Please let me know if you notice any degradation there.
Thanks,
Angel
if (!IsPostBack) { DataTable dt = new DataTable(); dt.Columns.Add("ProvinceName"); dt.Rows.Add("British Columbia"); dt.Rows.Add("Alberta"); dt.Rows.Add("Saskatchewan"); dt.Rows.Add("Manitoba"); dt.Rows.Add("Ontario"); dt.Rows.Add("Quebec"); dt.Rows.Add("New Brunswick"); dt.Rows.Add("Nova Scotia"); dt.Rows.Add("Newfoundland/Labrador"); dt.Rows.Add("Prince Edward Island"); dt.Rows.Add("Nunavut"); dt.Rows.Add("Yukon"); dt.Rows.Add("Northwest Territories");
webDropDownProvince0.DataSource = dt; webDropDownProvince0.ValueField = "ProvinceName"; webDropDownProvince0.TextField = "ProvinceName"; } webDropDownProvince0.DataBind();
Hi,
You are already binding the Text property by specifying the TextField mapping. So if you just remove the itemTemplate markup, i think it will be all ok.
Hope it helps,
When I remove the ItemTemplate the items in the dropdown list have hyperlinks on them which looks terrible. That is why I had to put in an ItemTemplate. Do you know how to get rid of the hyperlinks any other way?
Also, why would my DataBind now be working? It sounds like you have had success with it. You can see the code that is in the Page_Load method. There is nothing more than that. It is a simple test app to show this behaviour. My real web app has the same issues but it is more complex.
Hey David,
The links appear because probably CSS styles are not loaded correctly. do you have an ig_res folder somewhere? You can set the StyleSetName and StyleSetPath properties to define where is the location for all styling. In the default styling links are not displayed because there is specific css that removes all of this default "decoration".
I have set the StyleSetName to Office2007Blue and the hyperlinks still show up. I know the style is working since the control changes colors from the default. This is really frustrating trying to get this to work correctly.
Dont worry about the previous question. Speed is not an issue. It was because I was running in the debugger. When I run it on a web server in Release mode it is plenty fast.
Ok, that makes sense. On one of my controls which is bound to a SqlDataSource object, ti takes a while to load since the list is large at 317 items. Do you have any suggestions for that?
Hi David,
This is only when you use templating and access the DataItem without rebinding the control. We do not store the DataItem in ViewState - this will make it enourmous.
Only the WebDataGrid enables this behavior by setting the EnableDataViewState property to true.
In your example you have to save a reference to the data source because you are binding to a DataSource object. By doing so, after you rebind the control, you get back all the DataItems.
Ok, that all works, but why do I have to save the datasource with the WebDropDown and I dont have to do it with the WebCombo or the regular .NET combobox? That sure sounds like a bug with the control.
About DataBinding, it doesn't work in your case and you see empty items, because you are not storing the datasource in the session, and then restoring it back:
webDropDownProvince.DataSource = dt;
webDropDownProvince.ValueField = "ProvinceName";
webDropDownProvince.TextField = "ProvinceName";
Session["DropDownDataSource"] = dt;
}
webDropDownProvince.DataSource = Session["DropDownDataSource"];
webDropDownProvince.DataBind();
protected void webDropDownProvince_DataBound(object sender, EventArgs e)
{
// webDropDownProvince.SelectedItemIndex = 0;
// webDropDownProvince_SelectionChanged(null, null);
I commented the code to reset selection in the DataBound method, because it will wipe out the selection once the dropdown is rebound every time.
In my previous post I have removed the <ItemTemplate> markup ,and i don't see the underlined links (screenshot).
Hope it helps. Please let me know if i can assist with anything else.
Thank you,