如何更改DataTable类型?
如何克隆DataTable
并将其列和行类型更改为decimal
?如何更改DataTable类型?
private static DataTable GetDataTabletFromCSVFile(string csv_file_path)
{
DataTable csvData = new DataTable();
using (TextFieldParser csvReader = new TextFieldParser(csv_file_path))
{
csvReader.SetDelimiters(new string[] { "," });
csvReader.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn datecolumn = new DataColumn(column);
datecolumn.AllowDBNull = true;
csvData.Columns.Add(datecolumn);
;
}
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
//Making empty value as null
for (int i = 0; i < fieldData.Length; i++)
{
if (fieldData[i] == "")
{
fieldData[i] = null;
}
}
csvData.Rows.Add(fieldData);
}
}
return csvData;
}
你必须使用decimal.TryParse
到字符串解析到decimal
并使用正确的列式。然后你可以使用DataRow.SetField
扩展支持可空类型:
foreach (string column in colFields)
{
DataColumn datacolumn = new DataColumn(column, typeof(decimal));
datacolumn.AllowDBNull = true;
csvData.Columns.Add(datacolumn);
}
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
DataRow addedRow = csvData.Rows.Add();
for (int i = 0; i < fieldData.Length; i++)
{
decimal value;
if(decimal.TryParse(fieldData[i].Trim(), out value))
addedRow.SetField<decimal?>(i, value);
else
addedRow.SetField<decimal?>(i, null);
}
}
使用允许类型参数的DataColumn构造函数。
public DataColumn(
string columnName,
Type dataType
)
http://msdn.microsoft.com/es-es/library/x1tyd60z(v=vs.110).aspx
所以,如果每列将是小数类型的
foreach (string column in colFields)
{
DataColumn datecolumn = new DataColumn(column, typeof(decimal));
datecolumn.AllowDBNull = true;
csvData.Columns.Add(datecolumn);
}
当我用这一个ArgumentException了未处理csvData.Rows.Add(fieldData);输入字符串的格式不正确 –
当然,你需要转换正如您声明此列包含十进制值,将csv文件中的值添加到列之前的十进制值。使用decimal.Parse(fieldData)或Convert.ToDecimal(fieldData)。 csvData.Rows.Add(decimal.Parse(fieldData)) – Oscar
我比较table1和表2(字符串类型),然后建立一个新表,我需要排序(table3)。我可以建立table3行为十进制(有-ve值我需要它转换为十进制,因此它认为-ve符号) –
您可以在创建的DataColumn时指定的数据类型。如果不指定数据(在你的例子一样)明确地键入列将是字符串类型:
DataColumn datecolumn = new DataColumn(column, typeof(Decimal));
decimal.TryParse哇它是工作谢谢蒂姆:))) –