Я не совсем уверен, что вы пытаетесь выполнить, но, исходя из базовых объектов, вероятно, лучший маршрут. Дать этому спина ...
public class MyDataColumnCollection : InternalDataCollectionBase
{
private readonly ArrayList _list = new ArrayList();
protected override ArrayList List
{
get
{
return this._list;
}
}
public void Add(MyDataColumn c)
{
this.List.Add(c);
}
}
public class MyDataTable : DataTable
{
private MyDataColumnCollection _columns = new MyDataColumnCollection();
public new MyDataColumnCollection Columns
{
get { return this._columns; }
}
}
public class MyDataColumn : DataColumn
{
public string MyCustomProperty { get; set; }
}
static void Main(string[] args)
{
MyDataTable t = new MyDataTable();
MyDataColumn c = new MyDataColumn();
c.ColumnName = "My Test Column";
c.MyCustomProperty = "This is really cool!";
t.Columns.Add(c);
foreach (MyDataColumn mdc in t.Columns)
{
System.Diagnostics.Debug.WriteLine(mdc.MyCustomProperty);
}
}
Источник с пользовательскими KeyedCollection <>
public class MyDataColumnCollection :
KeyedCollection<string, MyDataColumn>
{
protected override string GetKeyForItem(MyDataColumn item)
{
return item.ColumnName;
}
}
public class MyDataTable : DataTable
{
private MyDataColumnCollection _columns = new MyDataColumnCollection();
public new MyDataColumnCollection Columns
{
get { return this._columns; }
}
}
public class MyDataColumn : DataColumn
{
public string MyCustomProperty { get; set; }
}
static void Main(string[] args)
{
MyDataTable t = new MyDataTable();
MyDataColumn c = new MyDataColumn();
c.ColumnName = "My Test Column";
c.MyCustomProperty = "This is really cool!";
t.Columns.Add(c);
foreach (MyDataColumn mdc in t.Columns)
{
System.Diagnostics.Debug.WriteLine(mdc.MyCustomProperty);
}
MyDataColumn testColumn = t.Columns["My Test Column"];
System.Diagnostics.Debug.WriteLine(testColumn.MyCustomProperty);
}
Решение с C# Extensions:
namespace ExtensionMethods
{
public static class MyExtensions
{
public static void UpdateValue(this DataTable dt)
{
// add code to update data in the DataTable
}
}
}
// in another class...
DataTable myDataTable = (Get DataTable object);
myDataTable.UpdateValue();
Вы можете посмотреть в использовании шаблона проектирования DAL (необязательно в сочетании с ORM), а не напрямую привязывается к конкретному представлению данных (например, DataTable). Если вы отрисуете свой уровень персистентности и сконструируете так, чтобы он был расширяемым (виртуальные методы, абстрактные методы или просто интерфейсы), тогда проблемы, подобные этому, становятся намного проще. http://en.wikipedia.org/wiki/Data_access_layer –
Всецело согласен с @Merlyn Morgan-Graham. Есть лучшие способы сделать это. – Randolpho
Вы имеете в виду классы ADO.NET DataTable и DataColumn? –