我设法获取枚举值以显示在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);