C#替换数据表中的值
如果大于0小于5,我需要用字符串符号(*)替换datatable中的整数值 到目前为止,我可以循环遍历每一行和相应的列,但无法获得datatable中包含的各个值 到目前为止,我编写的代码如下所示:C#替换数据表中的值,c#,loops,foreach,datatable,C#,Loops,Foreach,Datatable,如果大于0小于5,我需要用字符串符号(*)替换datatable中的整数值 到目前为止,我可以循环遍历每一行和相应的列,但无法获得datatable中包含的各个值 到目前为止,我编写的代码如下所示: public static DataTable SupressDataTable(DataTable cases) { DataTable suppressedDataTable = new DataTable(); foreach (var row in
public static DataTable SupressDataTable(DataTable cases)
{
DataTable suppressedDataTable = new DataTable();
foreach (var row in cases.Rows)
{
foreach (DataColumn column in cases.Columns)
{
if (column.IsNumeric())
{
}
}
}
return suppressedDataTable;
}
public static bool IsNumeric(this DataColumn col)
{
if (col == null)
return false;
// Make this const
var numericTypes = new[] { typeof(Byte), typeof(Decimal), typeof(Double),
typeof(Int16), typeof(Int32), typeof(Int64), typeof(SByte),
typeof(Single), typeof(UInt16), typeof(UInt32), typeof(UInt64)};
return ((IList) numericTypes).Contains(col.DataType);
}
如何获取值并替换它们?您不能对原始表执行此操作,因为
int
或double
列不是字符串
列。您需要一个新表,其中每个数字列都将替换为字符串列:
public static DataTable SupressDataTable(DataTable cases)
{
DataTable suppressedDataTable = cases.Copy(); // Same columns, same data
DataColumn[] allNumericColumns = suppressedDataTable.Columns.Cast<DataColumn>().Where(IsNumeric).ToArray();
foreach (DataColumn numericCol in allNumericColumns)
{
int ordinal = numericCol.Ordinal; // need to store before remove
suppressedDataTable.Columns.Remove(numericCol);
suppressedDataTable.Columns.Add(numericCol.ColumnName); // string column
suppressedDataTable.Columns[numericCol.ColumnName].SetOrdinal(ordinal);
}
for (int index = 0; index < suppressedDataTable.Rows.Count; index++)
{
DataRow row = suppressedDataTable.Rows[index];
foreach (DataColumn column in cases.Columns)
{
if (IsNumeric(column))
{
dynamic numVal = cases.Rows[index][column];
string newValue = numVal > 0 && numVal < 5 ? "*" : numVal.ToString();
row.SetField(column.Ordinal, newValue);
}
}
}
return suppressedDataTable;
}
公共静态数据表supersDataTable(数据表案例)
{
DataTable suppressedDataTable=cases.Copy();//相同的列,相同的数据
DataColumn[]allNumericColumns=suppressedDataTable.Columns.Cast()。其中(IsNumeric.ToArray();
foreach(所有数值列中的数据列数值列)
{
int ordinal=numericCol.ordinal;//删除前需要存储
suppressedDataTable.Columns.Remove(numericCol);
suppressedDataTable.Columns.Add(numericCol.ColumnName);//字符串列
suppressedDataTable.Columns[numericCol.ColumnName].SetOrdinal(ordinal);
}
对于(int index=0;index0&&numVal<5?*“:numVal.ToString();
row.SetField(column.Ordinal,newValue);
}
}
}
返回抑制数据表;
}
您不能对原始表执行此操作,因为int
或double
列不是字符串
列,所以我需要将数值列转换为字符串?