Why
- 最近自己在写一个小工具,正好需要使用到
GridControl的过滤内容从而实现我的日志等级过滤,作于记录。
How
# 日志信息类
public class LogInfoData
{
public LogInfoData()
{
if (string.IsNullOrWhiteSpace(ID))
{
ID = Guid.NewGuid().ToString();
}
Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
public string ID { get; set; }
public int Index { get; set; } = 0;
public string Time { get; set; } = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
public string Caption { get; set; }
public string Description { get; set; }
public LogLevel LogLevel { get; set; } = LogLevel.Info;
public bool IsShow { get; set; } = true;
}
private BindingList<LogInfoData> logInfos = new BindingList<LogInfoData>();
private List<CriteriaOperator> filters = new List<CriteriaOperator>();
private bool isShowError = false;
private bool isShowWarning = false;
private bool isShowInfo = false;
private void LogInfoUserControl_Load(object sender, EventArgs e)
{
this.gridControl_Log.DataSource = logInfos;
gridView_Main.BestFitColumns();
AddLog("测试", "测试文本", LogLevel.Error);
AddLog("测试1", "测试文本1", LogLevel.Info);
AddLog("测试2", "测试文本2", LogLevel.Warning);
}
private void gridView_Main_RowStyle(object sender, RowStyleEventArgs e)
{
if (e.RowHandle < 0)
{
return;
}
var row = e.RowHandle;
var logInfo = gridView_Main.GetRow(e.RowHandle) as LogInfoData;
if (logInfo.LogLevel == LogLevel.Error)
{
e.Appearance.BackColor = Color.Red;
}
else if (logInfo.LogLevel == LogLevel.Warning)
{
e.Appearance.BackColor = Color.Yellow;
}
else if (logInfo.LogLevel == LogLevel.Info)
{
e.Appearance.BackColor = Color.Green;
}
e.HighPriority = true;
}
private void AddLog(string caption, string description, LogLevel level)
{
var logInfo = new LogInfoData()
{
LogLevel = level,
Caption = caption,
Description = description,
};
logInfos.Insert(0, logInfo);
}
private void simpleButton_Error_Click(object sender, EventArgs e)
{
isShowError = !isShowError;
simpleButton_Error.Appearance.BackColor = isShowError ? Color.Red : Color.White;
BuildFilter();
}
private void simpleButton_Warnning_Click(object sender, EventArgs e)
{
isShowWarning = !isShowWarning;
simpleButton_Warnning.Appearance.BackColor = isShowWarning ? Color.Yellow : Color.White;
BuildFilter();
}
private void simpleButton_Info_Click(object sender, EventArgs e)
{
isShowInfo = !isShowInfo;
simpleButton_Info.Appearance.BackColor = isShowInfo ? Color.Green : Color.White;
BuildFilter();
}
private void BuildFilter()
{
filters.Clear();
if (isShowError)
{
filters.Add(new BinaryOperator("LogLevel", LogLevel.Error));
}
if (isShowWarning)
{
filters.Add(new BinaryOperator("LogLevel", LogLevel.Warning));
}
if (isShowInfo)
{
filters.Add(new BinaryOperator("LogLevel", LogLevel.Info));
}
if (!filters.Any())
{
gridView_Main.ActiveFilterCriteria = null;
return;
}
gridView_Main.ActiveFilterCriteria = new GroupOperator(GroupOperatorType.Or, filters);
}
Tips
- 只是一个简单示例,主要其实是第一次使用
ActiveFilterCriteria。
评论区