Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#替换数据表中的值_C#_Loops_Foreach_Datatable - Fatal编程技术网

C#替换数据表中的值

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

如果大于0小于5,我需要用字符串符号(*)替换datatable中的整数值

到目前为止,我可以循环遍历每一行和相应的列,但无法获得datatable中包含的各个值

到目前为止,我编写的代码如下所示:

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
列不是
字符串
列,所以我需要将数值列转换为字符串?