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

时间:2013-09-12 03:39:05

标签: c# vb.net generics datagridview datagridviewcolumn

我要求你帮忙知道是否存在快速方法来检查DataTable / Datagridview的特定列中的所有值是DateTime还是数字。

我正在尝试制作一种通用方法,将特定格式放在DGV的任何列中。

我有来自TEXT文件/ Excel或XML文件的信息,而没有先前的数据类型定义

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用扩展方法隐藏循环。最终结果将需要一个循环,即使循环隐藏在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 */ }
);

这种方法很快就会检查不再需要的行,并且在排除后不会继续检查给定的类型。