Code Bye

winfrom 一个很简单的问题 搞了一天 还没想出来

本人本人写了一个自定义控件   里面有一个Combobox 控件,本人再上面定义了一个Dictionay 属性  某个窗体假如要引用这个控件  给Dictionary赋值即可
自定义控件代码
public Dictionary<string, string> Dict
{
get;
set;
}
private void CustomBtnPage_Load(object sender, EventArgs e)
{
BindingSource bs=new BindingSource();
bs.DataSource=Dict;
cboState.DataSource = bs;
cboState.DisplayMember = “Value”;
cboState.ValueMember = “Key”;

}
引用这个控件窗体代码是
public Test()
{

InitializeComponent();
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add(“wosh”, “test”);
customBtnPage1.Dict = dict;

}
现在本人测试test窗体的时候总提示这个错误

本人假如将   cboState.ValueMember = “Key”; 这代码删除就正常了  为什么这样啊   本人在自定义控件中设置了一个断点  bs有值啊
都是正常的  怎么这样呢  望高手解决本人 心中的疑问  谢谢

解决方案

5

Dictionary<TKey, TValue>

5

 public Dictionary<string, string> Dict
{
get;
set;
}
private void CustomBtnPage_Load(object sender, EventArgs e)
{
BindingSource bs=new BindingSource();
bs.DataSource=Dict;
cboState.DataSource = bs;
cboState.DisplayMember = “Value”;
cboState.ValueMember = “Key”;

}
弱弱的问一句 你对 Dict 初始化了吗?  假如没有 那么 bs.DataSource = null;
public Test()
{

InitializeComponent();
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add(“wosh”, “test”);
customBtnPage1.Dict = dict;

}
而 你这里给Dict 复制并没有什么卵用 他是一个新的实例 就算是你控件本身没有问题
无论你对这个Dict属性怎么赋值
你控件里面的 bs.DataSource 一直都是 你最开始赋值的那个Dict
你的整个逻辑都是不通的
至少 你也得在 set{} 里面对 DataSource 重新赋值

30

cboState.DataSource = bs; //绑定数据源
你总得告诉 DataSource 中的成员与 bs 的成员见得对应关系吧?
有什么不好理解的
DataTable 只有列,顺序对应就可以了,所以不需要显式的声明
而 Dictionary 有 Key 和 Value,自然就得告知谁是谁了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明winfrom 一个很简单的问题 搞了一天 还没想出来