我一直在問題。我有一個動態創建控件的ASP.NET項目。更多的控件依賴於另一個控件(在回發中),因此它們可以改變它們的外觀。ListControl.DataBind()不按預期方式工作
我有列表控件和數據綁定它一個方法:
public static class ListControlExtensions
{
public static void BindList(this ListControl list, IEnumerable dataSource, string valueKey, string textKey)
{
list.Items.Clear();
list.Items.Add(new ListItem("(Empty)", "-1"));
list.AppendDataBoundItems = true;
list.DataSource = dataSource;
list.DataValueField = valueKey;
list.DataTextField = textKey;
list.DataBind();
}
}
傳入的數據源是很好的(如預期由於業務邏輯),但呈現的列表控制從去年的BindList沒有改變。因此,在第一次數據綁定之後,使用缺省數據源的問題列表控件不會改變。
的的BindList調用在OnInit中:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (CompaniesList != null)
{
BindCompaniesList(CompaniesList, valueToFilter);
}
}
protected void BindCompaniesList(ListControl listToBind, String valueToFilter)
{
if (listToBind != null)
{
var list = Helper.GetCompanies();
foreach (var item in list.Where(item => item.Value == valueToFilter))
{
item.Value = "-1";
}
listToBind.BindList(list, "Value", "Text");
}
}
固定:解決辦法:我認爲問題是,LoadViewState的OnInit後會發生,它會覆蓋之前的數據,存儲在ViewState中的列表控件。所以我已經從OnInit中將DataBind移動到了OnLoad,並緩存了選定的值,因爲綁定重置了它。
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (CompaniesList != null)
{
var selected = CompaniesList.SelectedIndex;
BindCompaniesList(CompaniesList, valueToFilter);
CompaniesList.SelectedIndex = selected;
}
}
你的意思只是第一次你的清單綁定,但不是在回發? – jams 2011-05-20 09:47:42
我每次綁定時,加載控件 - 但我認爲問題是,LoadViewState發生在OnInit之後,它用存儲在ViewState中的先前數據覆蓋ListControl。所以我已經將綁定移動到OnLoad – ajukraine 2011-05-20 09:57:15