[英]C# GetDataType from String in DataTable
加载表后,您将无法更改数据类型。 从原始表中克隆当前DataTable,找到age
列,将数据类型从字符串更改为int,然后导入行。
重要提示:以上假设,在这种情况下,年龄列可以表示每一行的一个 int,如果不是,您需要在使用 ImportRow 之前执行正确的断言。
这是一个概念示例
private static void ChangeColumnType()
{
DataTable table = new DataTable();
table.Columns.Add("Seq", typeof(string));
table.Columns.Add("age", typeof(string));
table.Columns.Add("name", typeof(string));
table.Rows.Add("1", "22", "Smith");
table.Rows.Add("2", "46", "Jones");
DataTable cloned = table.Clone();
bool found = false;
for (int index = 0; index < table.Columns.Count; index++)
{
if (string.Equals(table.Columns[index].ColumnName, "age",
StringComparison.CurrentCultureIgnoreCase))
{
cloned.Columns["age"]!.DataType = typeof(int);
found = true;
}
}
if (!found) return;
foreach (DataRow row in table.Rows)
{
cloned.ImportRow(row);
}
foreach (DataColumn column in cloned.Columns)
{
Console.WriteLine($"{column.ColumnName}\t{column.DataType}");
}
}
编辑:当年龄无法转换为整数时,一种可能的方法可以避免出现问题。
if (!found) return;
foreach (DataRow row in table.Rows)
{
if (int.TryParse(row.Field<string>("age"), out _))
{
cloned.ImportRow(row);
}
else
{
Console.WriteLine($"Failed: {string.Join(",", row.ItemArray)}");
}
}
抱歉,如果我不理解您的问题,但我会尝试回答我认为您在下面提出的问题:
如果您只是想确定数据类型,那么我建议您取该列中的第一个值(因为您显然不需要全部检查它们。)并执行 tryparse 以确定它是否与 int 兼容例如.
如果您使用 getType,它可能会返回一个字符串。
如果您尝试将整个列设置为数据类型,那么您可能应该在通过构造函数或以编程方式生成表的阶段执行此操作,如第一个示例所示
// Create second column.
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "ParentItem";
column.AutoIncrement = false;
column.Caption = "ParentItem";
column.ReadOnly = false;
column.Unique = false;
// Add the column to the table.
table.Columns.Add(column);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.