2009-08-26 36 views
0

我有一个创建和填充DataSet的主类,然后通过引用将该类的实例传递给我的应用程序的子控件。我想使用这个数据集来绑定到组件,在这种情况下,是一个列表框。这是一个Windows窗体应用程序。.Net Listbox DataBinding问题

继承人我尝试:

channelTypesLB.DataBindings.Add("Text", synData.ds, "ChannelTypes.channelType"); 

注意,我也尝试过这样的:(不知道那里有差异)

channelTypesLB.DataBindings.Add("Text", synData.ds.Tables["ChannelTypes"], "channelType"); 

世界上没有错误,我没有看到在列表框中的数据...当我输出synData.ds.Tables["ChannelTypes"].Rows.Count它告诉我,这个数据表中实际上有数据。

我错过了什么吗?我也修了channelTypesLB.Refresh();设置数据绑定后。

这也可能会有所帮助......这就是在创建数据集在我的主类的代码,不知道它可能是范围问题,我想像我会收到一个错误:

private DataSet _ds = new DataSet(); 
public DataSet ds { get { return _ds; } } 

回答

3

尝试设置列表框的DataSource,而不是绑定到Text属性:

channelTypesLB.DataSource = synData.ds; 
channelTypesLB.DisplayMember = "ChannelTypes.channelType"; 

我不以任何方式一个数据绑定的专家,但我相信,通过数据绑定的方式,您目前正在做的控制绑定到一个用于绑定一个val的PropertyManager对另一个价值的对象。通过设置DataSource,它应该绑定到用于绑定到收集CurrencyManager

Here's a quick overview of WinForms databinding

+0

Hrmm的工作...使用DisplayMember而不是DataMember ...我宁愿使用DataBindings的1班轮虽然 –

+0

哎呦,这是一个错字 - 没有像DataMember这样的事情。你也可以建立一个'BindingSource',它本身有一个DataSource和DisplayMember(虽然它们可以通过构造函数访问,我相信)并设置ListBox.DataSource = BindingSource – STW

+0

感谢您指引我朝着正确的方向 –

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(); 
+0

是的,winforms。任何想法为什么数据绑定不起作用? –