尝试解决整个web部件的个性化,并尝试将其实现为一个列表框。
最终结果将是两个列表框,具有可互换的值(即,一个值将只存在于其中一个列表框中)
但我不能为它维护数据源。所以也许我做错了?
这是我在页面上测试H2标签的内容
[Personalizable(PersonalizationScope.User)]
public string LabelText {
get { return h2Test.InnerText; }
set { h2Test.InnerText = value; }
}
如果我有一个文本框,用它来改变LabelText的值,那么当我关闭浏览器时,它会自动保持这个改变。
所以我想,好吧,也许同样的方法也适用于列表框
[Personalizable(PersonalizationScope.User)]
public DomainList Domains {
get { return (DomainList)lstBxDomains.DataSource; }
set {
lstBxDomains.DataSource = value;
lstBxDomains.DataBind();
}
}
其中DomainList只是一个扩展List的类,Domain只是一个三字段类,int,string,string。
但事实并非如此,所以这对于Web部件个性化automagican来说是太复杂了,还是我只是错误地实现了它(这很有可能)
protected void btnRemDomain_Click(object sender, EventArgs e) {
if (IsPostBack && lstBxDomains.SelectedIndex > -1) {
for (int i = 0; i < lstBxDomains.Items.Count; i++) {
if (lstBxDomains.Items[i].Selected) {
Domains.Remove(Domains.Find(d => d.ID.ToString() == lstBxDomains.Items[i].Value));
}
}
Domains = Domains;
}
}
域=域;这行的作用是查看显式设置值是否产生了影响(因为删除并不能真正重置字段的值),但事实并非如此。我还尝试创建一个新的本地域列表,将其设置为全局域列表,然后对其执行remove/find操作,然后将本地域列表设置为全局域列表。但也不行。