【问题标题】:How can you databind a single object in .NET?如何在 .NET 中对单个对象进行数据绑定?
【发布时间】:2008-09-07 15:18:43
【问题描述】:

我想使用一个公开数据源属性的组件,但我不想为数据源提供整个对象列表,我只想使用简单的对象。有没有办法做到这一点?

提到的组件是 DevExpress.XtraDataLayout.DataLayoutControl - 不过这与问题无关。

【问题讨论】:

    标签: .net data-binding


    【解决方案1】:

    Databinding 需要一个 IEnumerable 对象,因为它像 foreach 循环一样枚举它。

    所以要做到这一点,只需将您的单个对象包装在一个 IEnumerable 中。

    即使这样也行:

    DataBindObject.DataSource = new List<YourObject>().Add(YourObjectInstance);
    

    【讨论】:

    • DataBindObject.DataSource = new List&lt;YourObject&gt;(){ YourObjectInstance }; 可能更适合
    • List&lt;T&gt;.Add 返回void 而不是IEnumerable,因此该示例会导致编译时错误。
    【解决方案2】:

    在 ASP.NET2.0 中,您可以使用泛型集合来制作这个单一对象 仅包含一个对象的列表,您可以将其数据绑定到任何服务器控件 使用对象数据源,例如

    List<clsScannedDriverLicense> DriverLicenses = new
    List<clsScannedDriverLicense>();
    //this creates a generic collection for you that you can return from
    //your BLL to the ObjectDataSource
    DriverLicenses.Add(TheOneObjectThatYouHaveofType_c lsDriverLicense);
    

    那么您的 ObjectDataSource 将如下所示:

    <asp:ObjectDataSource ID="odsDL" runat="server"
    SelectMethod="OrdersByCustomer"
    TypeName="YourBLL.UtiltiesClassName"
    DataObjectTypeName="clsScannedDriverLicense">
    </asp:ObjectDataSource>
    

    Source

    【讨论】:

    • 附注,但人们真的使用 ObjectDataSource 吗?除了 MS 示例之外,我从未见过它的一种用法……它太丑了。
    • ObjectDataSource 是来自引用源的复制和粘贴。我几乎从未在野外艰难地见过它。
    【解决方案3】:

    我认为除了使用实现 IEnumerable 的类之外,您别无选择。即使 DataSource 属性足够聪明,可以接受标量对象,它也可能会在内部将其转换为向量。

    然而,我会考虑使用一个简单的数组而不是 List,因为这将导致更少的内存分配。如果您不喜欢数组语法(也为了提高可读性),您可以使用辅助方法:

    T[] DataSourceHelper::ToVector(T 标量) { 返回新的 T[] { 标量 }; }

    【讨论】:

      【解决方案4】:

      我追求和你一样的东西。我发布了一个新问题Two-way databinding of a custom templated asp.net control,它有点领先。看看你能做些什么......

      【讨论】:

        【解决方案5】:

        在我的 formView 中使用它:

        databoundControl.DataSource = new [] { singleObject };
        databoundControl.DataBind();
        

        【讨论】:

          猜你喜欢
          • 2014-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-12
          • 1970-01-01
          • 2011-05-14
          • 2020-09-29
          相关资源
          最近更新 更多