是否可以为Typed Dataset表行字段值创建接口?

时间:2011-01-18 15:20:05

标签: c# interface strongly-typed-dataset

我在类型化数据集中有几个表,它们共享一些公共字段。我为这些字段创建了一个接口,并将其添加到具有分部类的表行中。所有内容都会编译,但是当我尝试将其与界面一起使用时,它不起作用。

我在某处读到了接口的实现需要在同一个分部类中。这种情况很糟糕,如果这是真的,他们应该让编译器抱怨。

有没有其他人遇到这个?任何解决方法?

这是我的代码

首先是界面:

public interface IDataField
{
    //These two fields are generated in the typed data tables
    string Data_Field_Name { get; set; }

    int Data_Field_ID { get; set; }

}

现在,字段是在数据集设计器的类型化数据集中生成的,以及所有这些,我确信这些属性存在,所以我将接口添加到我创建的部分类文件中。这个类编译得很好,它喜欢到目前为止的接口。

public partial class Data
{
    public partial class Data_FieldRow:IDataField
    {
    }
}

现在我添加一个方法来使用该接口:

public static void PopulateFieldDropdown(DropDownList ddlFields
            , IEnumerable<IDataField> Fields
            , string SelectedValue
            , bool AddBlank
            , string LanguageCode)

所有事情都归于此。 现在当我试着打电话的时候

using (DataTableAdapters.Data_FieldTableAdapter a = new DataTableAdapters.Data_FieldTableAdapter())
{  
    Data.Data_FieldDataTable dataFieldTable = a.GetData();
    globals.ui.PopulateFieldDropdown(ddlFields, dataFieldTable, null, true, globals.LanguageCode);
}

我收到错误

Argument '2': cannot convert from 'Data.Data_FieldDataTable' to 'System.Collections.Generic.IEnumerable<IDataField>

解决方案: 显然你不能只传入实现接口的IEnumerable集合,你必须实际上转换集合中的所有项目。

因此,在方法调用中,我必须将 dataFieldTable 更改为 dataFieldTable.ToList()。ConvertAll(c =&gt;(IDataField)c)

感谢Ian Ringrose验证接口是否适用于生成的行字段值。 谢谢伊恩!

0 个答案:

没有答案