zoukankan      html  css  js  c++  java
  • WinForm下一个筛选的demo(希望大家指正)

    休息在家,难得有敲代码的雅兴,随手敲个demo,给大家看看。
    里面部分实现对于新手估计有所帮助,对于高手呢,就请大家给我指错吧。本人照单全收。

    demo主要实现了两个功能。

    • 高级查找(FrmSift)
    • 列表筛选(UCFilter)

    关于sift和filter两个词这里就不做争论了。
    先看我画的demo界面:

    高级查找


    高级查找针对于查找选项过多的情况下使用,做为一个通用的查找功能出现在软件项目中。
    高级查找使用时基本只需传入当前的DataGridView实例,生成需要的Where条件。
    在demo中,高级查找实现了基本的通用功能,可以在多个数据列表中使用。
    高级查找根据所给的DataGridView生成列选项(左边的选择项),对于某些不想显示的列可以隐藏(代码中我隐藏了第一列GUID),对于特殊的情况,可以传入一个SiftItem数组。
    数据类型现在只做了三种判断,而且判断方式让人吐血:

    switch (type.ToString())
    {
        case "System.Int16":
        case "System.Int32":
        case "System.Int64":
        case "System.Single":
        case "System.Double":
        case "System.Decimal":
            siftType = SiftTypeEnum.Money;
            break;
        case "System.DateTime":
            siftType = SiftTypeEnum.Date;
            break;
        default:
            siftType = SiftTypeEnum.Text;
            break;
    }

    对于数字类型和日期类型,给予两个条件共同完成——从XXX至XXX,所以在处理上也费了点功夫。比如说删除其中一个,另一个也要删除等情况。
    高级查找现在只做了AND条件,没有强大的组合方式。
    值得一提的是在处理日期类型时不能得到多数据库的支持,这里由于只是模拟数据,使用DataTable的Select去模拟查找功能,日期类型没问题。但是如果是MSSQL可能会出错,如果更甚者在数据库中使用varchar保存日期类型,这里处理就更加麻烦。(比如本人在项目中就对Oracle的此类现象进行了处理)
    这里对于时间段做了一些功夫,其实都是有一次项目中需要,这里也就没删,保留了下来,希望对大家有用。

    列表选择


    列表选择实现的最大一个功能就是可以筛选。
    对于筛选后的列表,不会改变已经选择的状态。
    其实很简单,不止保存数据源,还保存了对于每个数据的选择状态。
    在列表查找中,对于上方全选的处理实在让我费了不少功夫。
    主要是很多方面都要我去判断全选状态。
    ListCheckBox的ItemCheck事件和全选的CheckStateChanged事件几乎让我弄的惨不忍睹,加了减了,减了加了,如下类似的代码我调用了不知道多少次。

    this.chbxAll.CheckStateChanged -= this.chbxAll_CheckStateChanged;
    
    //do something
    
    this.chbxAll.CheckStateChanged += this.chbxAll_CheckStateChanged;

    好吧,写出来就是让大家指正的。

    最后,源码:下载 

    欢迎来我的博客:nanqi.info

  • 相关阅读:
    安全测试知多少
    支付测试
    接口测试总结
    SoapUI+excel接口自动化测试简述
    浏览器及元素的常用函数及变量整理总结
    jmeter接口自动化测试,数据驱动玩法
    接口测试点汇总
    测试面试题;
    MySQL入门,了解下、
    徒手运维MGR集群基本操作
  • 原文地址:https://www.cnblogs.com/nanqi/p/filter.html
Copyright © 2011-2022 走看看