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)
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.
Thanks,
Angel
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,