Как расширить DataRow и DataTable в C# с дополнительными свойствами и методами?

Я хотел бы, создают пользовательский 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?

Спасибо,

5
задан pencilCake 23 June 2010 в 12:07
поделиться

2 ответа

Из вашего вопроса неясно, знакомы ли вы с типизированными наборами данных. По сути, они представляют собой то, о чем вы просите.

Вы можете использовать встроенные мастера для создания типизированного набора данных на основе XSD (а XSD извлекается из схемы Db). В проекте WinForms выберите "Add DataSource" и выполните следующие шаги.

Даже если вы не хотите использовать эту модель, вы можете позаимствовать из кода свойства, частичные классы и т.д.

Было бы разумно либо использовать эту модель, либо держаться очень близко к ней.

0
ответ дан 18 December 2019 в 13:10
поделиться

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)
    { }
}
4
ответ дан 18 December 2019 в 13:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: