我正在尝试使用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。
答案 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”列,它是字符串