C# 检查特定列的所有值以定义DGV中的数据类型

C# 检查特定列的所有值以定义DGV中的数据类型,c#,vb.net,generics,datagridview,datagridviewcolumn,C#,Vb.net,Generics,Datagridview,Datagridviewcolumn,我请求您提供帮助,以了解是否存在一种快速方法来检查DataTable/Datagridview特定列中的所有值是DateTime还是数字 我正在尝试创建一个通用方法,将特定格式放入DGV中的任何列中 我有来自文本文件/Excel或XML文件的信息,但以前没有数据类型定义 谢谢 您可以将循环隐藏在扩展方法中。然而,最终的结果将需要一个循环,即使循环隐藏在Linq操作中。例如,您可以编写以下扩展方法: public static void ApplyColumnFormatting(此System.

我请求您提供帮助,以了解是否存在一种快速方法来检查DataTable/Datagridview特定列中的所有值是DateTime还是数字

我正在尝试创建一个通用方法,将特定格式放入DGV中的任何列中

我有来自文本文件/Excel或XML文件的信息,但以前没有数据类型定义


谢谢

您可以将循环隐藏在扩展方法中。然而,最终的结果将需要一个循环,即使循环隐藏在Linq操作中。例如,您可以编写以下扩展方法:

public static void ApplyColumnFormatting(此System.Data.DataTable表,字符串列,Action formatDateTime,Action formatNumeric)
{
bool foundNonDateTime=false;
bool foundNonNumeric=false;
日期时间dt;
双数;
foreach(表中的System.Data.DataRow行)
{
string val=行[列]作为字符串;
//如果值不是字符串,可以根据需要选择跳过此迭代。
if(val==null)
继续;
//检查非日期时间,但前提是我们还没有排除它
如果(!foundNonDateTime&&!DateTime.TryParse(val,out dt))
foundNonDateTime=true;
//检查非数字,但前提是我们尚未排除它
如果(!foundNonNumeric&&!Double.TryParse(val,out num))
foundNonNumeric=true;
//如果我们已经排除了这两种类型,请退出循环
if(foundNonDateTime&&foundNonNumeric)
打破
}
如果(!foundNonDateTime)
formatDateTime();
如果(!foundNonNumeric),则为else
formatNumeric();
}
然后你可以这样称呼它:

System.Data.DataTable=。。。;
table.ApplyColumnFormatting(“列名称”,
()=>{/*在此处应用日期时间格式*/},
()=>{/*在此处应用数字格式*/}
);

这是快速的,因为它不会检查超出需要的任何行,并且在排除给定类型后不会继续检查该类型。

您是否尝试过
IsDate()
IsNumeric
?对于
数据表
,请检查属性
DataColumn.DataType
。对于
DataGridView
,请查看属性
DataGridViewColumn.ValueType
@SSS:我不想为每一行创建循环。我在考虑更有效的方法。@KingKing:我有一些例子,当ValueType是字符串,但值是日期或数字时。我想为这些列创建一种格式
DataGridViewColumn.DefaultCellStyle.Format=“E2”d、g、N、N2、C2等
@MiBol如果您的网格是
数据绑定的
,您应该检查
数据表
,结果应该是准确的。我想出了这个主意。。。但我认为应该存在一种更有效的方法。谢谢你的回答@MiBol任何更有效的方法都需要一些已知的数据约束。例如,如果您知道数据类型将始终保持一致,那么您可以只检查前几行。例如,将CSV文件导入Excel时,数据类型预测就是这样做的。