Должен ли я изменить тип данных столбца таблицы данных после заполнения данными - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь изменить тип данных столбца таблицы данных, используя c #.

Я пробовал, как показано ниже:

DataTable dtCloned = dt.Clone();
dtCloned.Columns[0].DataType = typeof(Int32);
foreach (DataRow row in dt.Rows) 
{
    dtCloned.ImportRow(row);
}

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

int startvalue = Convert.ToInt32(lblSelectionStart.Text);
int endvalue = Convert.ToInt32(lblSelectionEnd.Text);
var dv1 = new DataView { Table = dt };
dv1.RowFilter = "fees >=" + startvalue + " and fees <=" + endvalue;
dt = dv1.ToTable();

Я хочу изменить столбец сборов на int из строки.

1 Ответ

0 голосов
/ 09 января 2019

Если данные в dt поступили из базы данных, измените запрос базы данных для выполнения преобразования int

--oracle example
SELECT to_number(fees) as feesint FROM ...

--sqls example
SELECT convert(int, fees) as feesint FROM ...

--MySQL example
SELECT convert(fees, integer) as feesint FROM ...

Если данные в dt не пришли из базы данных, добавьте в dt еще один столбец типа int и проанализируйте все данные в нем:

dt.Columns.Add("feeint", typeof(Int)32);
foreach(var ro in dt.Rows)
  ro["feeint"] = int.Parse((string)ro["fees"]);

Позже, когда вы хотите установить фильтр строк:

dv1.RowFilter = $"FeesInt >= {startValue} AND FeesInt <= {endValue}";

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...