【问题标题】:.Net Listbox DataBinding Problem.Net 列表框数据绑定问题
【发布时间】:2010-11-22 20:27:13
【问题描述】:

我有一个创建和填充 DataSet 的主类,然后通过引用将此类的一个实例传递给我的应用程序的子控件。我想使用此数据集将数据绑定到组件,在本例中为列表框。这是一个 Windows 窗体应用程序。

这是我正在尝试的:

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; } }

【问题讨论】:

    标签: .net data-binding dataset


    【解决方案1】:

    尝试设置 Listbox 的 DataSource 而不是绑定到 Text 属性:

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

    无论如何我都不是 DataBinding 专家,但我相信通过您当前执行的数据绑定方式,控件将绑定到 PropertyManager,该 PropertyManager 用于将对象的一个​​值绑定到一个值另一个。通过设置DataSource,它应该绑定到用于绑定到集合CurrencyManager

    Here's a quick overview of WinForms databinding

    【讨论】:

    • Hrmm 有效...使用 DisplayMember 而不是 DataMember...虽然我更喜欢使用 DataBindings 的 1 行
    • 哎呀,那是一个错字——没有像 DataMember 这样的东西。您还可以构建一个BindingSource,它本身有一个 DataSource 和 DisplayMember(尽管我相信它们可以通过构造函数访问)并设置 ListBox.DataSource = BindingSource
    【解决方案2】:

    我假设这里是 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-10
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多