C # заменить значения в Datatable - PullRequest
0 голосов
/ 28 июня 2018

Мне нужно заменить целые значения внутри таблицы на строковый символ (*), если они больше 0 и меньше 5.

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

Код, который я написал до сих пор, показан ниже:

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);
    }

Как мне получить значения и затем заменить их?

1 Ответ

0 голосов
/ 28 июня 2018

Вы не можете сделать это с исходной таблицей, потому что столбец int или double не является столбцом string. Вам нужна новая таблица, в которой каждый числовой столбец заменяется строковым столбцом:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...