检查特定列的所有值以定义 DGV 中的数据类型
本文关键字:定义 DGV 数据类型 检查 | 更新日期: 2023-09-27 18:31:04
我请您帮助了解是否存在一种快速方法来检查DataTable/Datagridview的特定列中的所有值是否都是DateTime或数字。
我正在尝试制作一种通用方法,将特定格式放入 DGV 的任何列中。
我有来自文本文件/Excel或XML文件的信息,没有以前的数据类型定义
谢谢!
可以将循环埋在扩展方法中。 但是,最终结果将需要在某处执行循环,即使该循环隐藏在 Linq 操作中也是如此。 例如,您可以编写以下扩展方法:
public static void ApplyColumnFormatting(this System.Data.DataTable table, string column, Action formatDateTime, Action formatNumeric)
{
bool foundNonDateTime = false;
bool foundNonNumeric = false;
DateTime dt;
Double num;
foreach (System.Data.DataRow row in table.Rows)
{
string val = row[column] as string;
// Optionally skip this iteration if the value is not a string, depending on your needs.
if (val == null)
continue;
// Check for non-DateTime, but only if we haven't already ruled it out
if (!foundNonDateTime && !DateTime.TryParse(val, out dt))
foundNonDateTime = true;
// Check for non-Numeric, but only if we haven't already ruled it out
if (!foundNonNumeric && !Double.TryParse(val, out num))
foundNonNumeric = true;
// Leave loop if we've already ruled out both types
if (foundNonDateTime && foundNonNumeric)
break;
}
if (!foundNonDateTime)
formatDateTime();
else if (!foundNonNumeric)
formatNumeric();
}
然后你可以这样称呼它:
System.Data.DataTable table = ...;
table.ApplyColumnFormatting("Column_Name",
() => { /* Apply DateTime formatting here */ },
() => { /* Apply Numeric formatting here */ }
);
从某种意义上说,这很快,因为它不会检查任何不必要的行,并且在排除给定类型后不会继续检查给定类型。