在rowfilter中使用枚举值 - DataGridView

时间:2014-07-19 17:29:56

标签: c# datagridview enums

我设法获取枚举值以显示在dataviewgrid中,但我无法在rowfilter中使用枚举值。

rowfilter是由用户构建的,因此它必须是友好的格式(即用户不会知道枚举ID)。

这是代码的精简版本,用于说明我尝试做的事情。请记住,我在这里设置了代码中的rowfilter,但用户通常会创建rowfilter。真正的行过滤器可能比示例复杂得多。

无论如何我可以"查找" enum id基于提供的值?
另一个选项是转换为使用字符串并在每一行中设置LogType.ToString()。在某些情况下,数据表将包含超过400,000多行,所以我尽量尝试精简。

public enum LogType
{
    Log1,
    Log2,
    Log3,
    Log4
}

DataTable dtResult = new DataTable();

DataColumn rowIdColumn = new DataColumn();
rowIdColumn.DataType = System.Type.GetType("System.Int32");
rowIdColumn.AutoIncrement = true;
rowIdColumn.AutoIncrementSeed = 1;
rowIdColumn.AutoIncrementStep = 1;
rowIdColumn.ColumnName = "Row";

dtResult.Columns.Add(rowIdColumn);
dtResult.Columns.Add("File", typeof(string));
dtResult.Columns.Add("LogType", typeof(LogType));
dtResult.Columns.Add("Message", typeof(string));

//Parsing code **

while(gp.Read()){        //Parse log file

    switch (LogTypeValue)
    {
        case LogType.Log1:
            dtResult.Rows.Add(filePath, LogTypeValue, 'Test1');
            break;
        case LogType.Log2:
            dtResult.Rows.Add(filePath, LogTypeValue, 'Test2');
            break;
        case LogType.Log3:
        case LogType.Log4:
            dtResult.Rows.Add(filePath, LogTypeValue, 'Test3');
            break;
    }    
}

结果

string filter == "LogType = '2'";    //Returns correct data
DataView dtSearch = new DataView(dtResult, filter,"File",DataViewRowState.CurrentRows);       

string filter == "LogType = 'Log1'";    //Doesn't return anything
DataView dtSearch = new DataView(dtResult, filter,"File",DataViewRowState.CurrentRows);       

0 个答案:

没有答案