Я хотел бы, создают пользовательский DataRow, который будет иметь - скажем, propery под названием IsCheapest.
public class RateDataRow : DataRow
{
protected internal RateDataRow(DataRowBuilder builder) : base(builder)
{
}
public bool IsCheapest { get; set ;}
}
И я хочу иметь новый DataTable, который содержит только *** RateDataRow *** s так, чтобы.NewDataRow () возвратил экземпляр RateDataRow как новую строку.
какова должна быть реализация на классе, который расширяет DataTable?
Спасибо,
Из вашего вопроса неясно, знакомы ли вы с типизированными наборами данных. По сути, они представляют собой то, о чем вы просите.
Вы можете использовать встроенные мастера для создания типизированного набора данных на основе XSD (а XSD извлекается из схемы Db). В проекте WinForms выберите "Add DataSource" и выполните следующие шаги.
Даже если вы не хотите использовать эту модель, вы можете позаимствовать из кода свойства, частичные классы и т.д.
Было бы разумно либо использовать эту модель, либо держаться очень близко к ней.
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)
{ }
}