侧边栏壁纸
  • 累计撰写 92 篇文章
  • 累计创建 11 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Dev GridControl过滤

祈安千
2026-05-13 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

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);
}
 /// <summary>
 /// 刷新日志
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 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;
 }
/// <summary>
/// 获取日志信息
/// </summary>
/// <param name="caption"></param>
/// <param name="description"></param>
/// <param name="level"></param>
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();
}
/// <summary>
/// 构建过滤器
/// </summary>
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
0

评论区