[英]How to extend DataRow and DataTable in C# with additional properties and methods?
我想创建一个自定义的DataRow,它将具有-let的说法 - 一个名为IsCheapest的软件。
public class RateDataRow : DataRow
{
protected internal RateDataRow(DataRowBuilder builder) : base(builder)
{
}
public bool IsCheapest { get; set ;}
}
我想要一个只包含*** RateDataRow ***的新DataTable,以便.NewDataRow()将RateDataRow实例作为新行返回。
什么应该是扩展DataTable的类的实现?
谢谢,
我知道这是一个旧帖子,但我无法得到上面的例子。 我遇到了类似的问题,所以很想找到解决方案。 经过一番研究后,我发现以下内容有效:
class Program
{
static void Main(string[] args)
{
MyDataTable t1 = new MyDataTable();
t1.Columns.Add(new DataColumn("Name", typeof(string)));
t1.Columns.Add(new DataColumn("DateOfBirth", typeof(DateTime)));
MyDataRow r1 = t1.NewRow() as MyDataRow;
r1["Name"] = "Bob";
r1["DateOfBirth"] = new DateTime(1970, 5, 12);
t1.Rows.Add(r1);
}
}
[Serializable]
public class MyDataTable : DataTable
{
public MyDataTable()
: base()
{
}
public MyDataTable(string tableName)
: base(tableName)
{
}
public MyDataTable(string tableName, string tableNamespace)
: base(tableName, tableNamespace)
{
}
/// <summary>
/// Needs using System.Runtime.Serialization;
/// </summary>
public MyDataTable(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
protected override Type GetRowType()
{
return typeof(MyDataRow);
}
protected override DataRow NewRowFromBuilder(DataRowBuilder builder)
{
return new MyDataRow(builder);
}
}
[Serializable]
public class MyDataRow : DataRow
{
public bool MyPropertyThatIdicatesSomething { get; private set; }
public MyDataRow()
: base(null)
{
}
public MyDataRow(DataRowBuilder builder)
: base(builder)
{
}
}
DataTable公开GetRowType虚方法,在派生类中重写它。 任何尝试添加错误类型的行都会引发异常:
class Program
{
static void Main(string[] args)
{
MyDataTable t = new MyDataTable();
t.Rows.Add(t.NewRow()); // <-- Exception here, wrong type (base doesn't count).
}
}
public class MyDataTable : DataTable
{
public MyDataTable()
: base()
{ }
protected override Type GetRowType()
{
return typeof(MyDataRow);
}
}
public class MyDataRow : DataRow
{
public MyDataRow()
: base(null)
{ }
}
根据您的问题,您是否熟悉Typed Datasets并不清楚。 它们基本上就是你要求的。
您可以使用内置向导基于XSD创建类型化数据集(并且从Db架构中提取XSD)。 在WinForms项目中,选择“添加数据源”并按照步骤操作。
即使您不想使用该模型,也可以从属性,部分类等代码中借用。
使用该模型或保持非常接近是明智的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.