我一直在问题。我有一个动态创建控件的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