我有一个创建和填充DataSet的主类,然后通过引用将该类的实例传递给我的应用程序的子控件。我想使用此数据集来数据绑定到组件,在本例中是一个列表框。这适用于Windows窗体应用程序。
继承人我正在尝试的事情:
channelTypesLB.DataBindings.Add("Text", synData.ds, "ChannelTypes.channelType");
注意,我也试过这个:(不确定是否有区别)
channelTypesLB.DataBindings.Add("Text", synData.ds.Tables["ChannelTypes"], "channelType");
Theres没有错误,我没有看到列表框中的数据...当我输出synData.ds.Tables["ChannelTypes"].Rows.Count
时,它告诉我实际上数据中有数据。
我错过了什么吗?我还修改了channelTypesLB.Refresh();设置数据绑定后。
这也可能有用......这是我的主类中创建数据集的代码,不确定它是否可能是范围问题,我想我会收到错误:
private DataSet _ds = new DataSet();
public DataSet ds { get { return _ds; } }
答案 0 :(得分:3)
尝试设置Listbox的DataSource,而不是绑定到Text属性:
channelTypesLB.DataSource = synData.ds;
channelTypesLB.DisplayMember = "ChannelTypes.channelType";
我无论如何都不是DataBinding专家,但我相信通过数据绑定您当前的方式,控件绑定到PropertyManager
,用于将对象的一个值绑定到另一个值。通过设置DataSource
,它应绑定到用于绑定到集合的CurrencyManager
。
答案 1 :(得分:1)
我在这里假设winforms,因为没有ASP.NET标签......
channelTypesLB.DataSource = synData.ds.Tables["ChannelTypes"].DefaultView;
channelTypesLB.DisplayMember = "channelType";
以防万一它是ASP.NET,但尝试:
channelTypesLB.DataSource = synData.ds.Tables["ChannelTypes"].DefaultView;
channelTypesLB.DataTextField = "channelType";
channelTypesLB.DataValueField = "channelTypeId"; // I'm assuming this field exists, replace with your id field
channelTypesLB.DataBind();