填充数据后,我应该更改数据表列数据类型吗?

时间:2019-01-09 09:09:57

标签: c# .net linq datatable

我正在尝试使用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 :(得分:0)

如果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}";

请记住使用“ feintint转换”列,而不要使用“ feets”列,它是字符串