C#DataTable中对DataColumn的约束?

Raf*_*off 4 .net c# datatable constraints system.data

是否可以在C#中的DataTable上创建值范围约束?

我正在向DataTable动态添加一列:

this.PrimaryCorrelationMatrix.Columns.Add(sName, typeof(int));
Run Code Online (Sandbox Code Playgroud)

但是我希望这个列中的所有值都是[0,10]的整数.我可以直接在DataTable上实现这样的约束吗?

我能想到的下一个最佳选择是使用typeof(specialObj)创建一些具有可能值[0,10]的对象,而不是typeof(int).

Lar*_*ech 6

一种方法是检查e.ProposedValueDataTable的ColumnChanging事件.

要对特定列进行约束,可以使用DataColumn的ExtendedProperties集合作为标志来检查这些约束:

DataTable dt = new DataTable();
DataColumn dc = new DataColumn("Range", typeof(int));
dc.ExtendedProperties.Add("Min", 0);
dc.ExtendedProperties.Add("Max", 10);
dt.Columns.Add(dc);
dt.ColumnChanging += dt_ColumnChanging;
Run Code Online (Sandbox Code Playgroud)

在ColumnChanging事件中,您将检查这些属性是否存在,然后使用它们:

void dt_ColumnChanging(object sender, DataColumnChangeEventArgs e) {
  if (e.Column.ExtendedProperties.ContainsKey("Min") &&
      e.Column.ExtendedProperties.ContainsKey("Max")) {
    int min = (int)e.Column.ExtendedProperties["Min"];
    int max = (int)e.Column.ExtendedProperties["Max"];
    if ((int)e.ProposedValue < min) e.ProposedValue = min;
    if ((int)e.ProposedValue > max) e.ProposedValue = max;
  }
}
Run Code Online (Sandbox Code Playgroud)