西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发其它知识 → 医院病人资料管理系统高级查询功能分析

医院病人资料管理系统高级查询功能分析

相关软件相关文章发表评论 来源:西西整理时间:2011/4/17 18:50:30字体大小:A-A+

作者:西西点击:337次评论:41次标签: 资料管理系统

客户资料管理系统3.5绿色免费版
  • 类型:办公软件大小:1.0M语言:中文 评分:2.8
  • 标签:
立即下载

在我的共享软件-病人资料管理系统(该软件是是一款针对病人基本情况、手术情况、化疗情况、随访情况的存储、修改维护、条件查询、导出导出Excel、科室数据合并、图片查找、数据打印、高级查询等功能的软件)中,有时候资料管理者需要对多个条件进行组合查询,由于字段比较多,一般很难满足客户的要求,在一个窗体中列出所有的条件可供查询,而且一般情况下,很多条件很少用到,把它全部摆到主界面上也显得不够美观和实用。

我的做法是,只在主界面中列出比较常用的一些条件给客户进行普通的查询显示,如下图所示:

 
而需要更多条件查询的时候,把它做成一个高级查询的页面,列出所有的字段给用户选择,然后可以注册多个条件进行查询,如高级查询的界面如下所示:

 

这样客户一个可以方便在常用查询条件中查询数据,第二个可以当有需要的时候,在所有的字段中组合查询各种条件来查询内容,虽然高级查询界面做的不算很复杂,但满足一般的需求是没问题了,而且很多客户使用,也感觉不错,这就足够了。

说完一些总体的内容,我们下面开看看详细的代码实现,以便给大家提供思路及参考。

1、首先我们在界面上绑定相关的查询条件数据、字段列表等信息,具体代码如下所示,其中获取字段列表的时候,我们获取一条记录,取返回表格数据的表头信息即可:

        private void BindData()
        {
            this.txtCondtion.Items.Clear();
            this.txtCondtion.Items.Add(new CListItem("模糊包含", SqlOperator.Like.ToString()));
            this.txtCondtion.Items.Add(new CListItem("等于", SqlOperator.Equal.ToString()));
            this.txtCondtion.Items.Add(new CListItem("不等于", SqlOperator.NotEqual.ToString()));

            PagerInfo pagerInfo = new PagerInfo();
            pagerInfo.CurrenetPageIndex = 1;
            pagerInfo.PageSize = 1;
            DataSet ds = BLLFactory<PatientCase>.Instance.GetAllToDataSet(pagerInfo);
            if (ds != null)
            {
                DataTable dt = ds.Tables[0];
                this.txtFieldName.Items.Clear();
                foreach (DataColumn col in dt.Columns)
                {
                    this.txtFieldName.Items.Add(col.ColumnName);
                }
            }
        } 

当响应添加条件的时候,我们存储相关的信息并显示在ListView里面即可,如下所示。

private void btnAddCondition_Click(object sender, EventArgs e)
        {
            if (this.txtContent.Text.Length == 0)
            {
                if (MessageUtil.ShowYesNoAndTips("查询内容为空,您确认要继续么?") == DialogResult.No)
                {
                    return;
                }
            }

             CListItem selectItem = this.txtCondtion.SelectedItem as CListItem;
             if (selectItem != null)
             {
                 ListViewItem item = new ListViewItem(this.txtFieldName.Text);
                 item.SubItems.Add(this.txtCondtion.Text);
                 item.SubItems.Add(this.txtContent.Text);
                 item.Tag = ConvertCondition(selectItem.Value);
                 this.listView1.Items.Add(item);
             }
        }

而当用户确定的时候,我们只需要简单的处理一下,给窗体的DialogResult设置为OK即可。

        private void btnOK_Click(object sender, EventArgs e)
        {
            if (this.listView1.Items.Count == 0)
            {
                if (MessageUtil.ShowYesNoAndTips("条件组合为空,您确认要继续么?") == DialogResult.No)
                {
                    this.DialogResult = DialogResult.None;
                    return;
                }
            }

            this.DialogResult = DialogResult.OK;
        } 


 而在弹出高级查询窗体的父窗口里面,我们这样操作,判断窗体返回值是DialogResult是OK的话,那么获取到相应的条件,然后再主界面中查询即可,代码如下所示:

private void tsbAdvanceSearch_Click(object sender, EventArgs e)
        {
            FrmAdvanceSearch dlg = new FrmAdvanceSearch();
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                SearchCondition condtion = dlg.GetAdvanceCondition();

                BindData(condtion);
            }
        } 


其中 GetAdvanceCondition函数是高级查询窗体里面的函数,主要是根据已有条件生成给父窗体调用的,返回响应的查询条件,实现如下所示:

        public SearchCondition GetAdvanceCondition()
        {
            if(this.listView1.Items.Count > 0)
            {
                SearchCondition condition = new SearchCondition();
                foreach (ListViewItem item in this.listView1.Items)
                {
                    SqlOperator op = (SqlOperator)item.Tag;
                    condition.AddCondition(item.Text, item.SubItems[2].Text, op);
                }
                return condition;
            }
            return null;
        }

        private SqlOperator ConvertCondition(string strSqlOperator)
        {
            SqlOperator sqlOperator = SqlOperator.Like;
            try
            {
                sqlOperator = (SqlOperator)Enum.Parse(typeof(SqlOperator), strSqlOperator);
            }
            catch
            {
            }
            return sqlOperator;
        } 

其中的SearchCondition 类是我封装的一个查询类,用来代替硬编码等相关操作,以便方便、准确、有效的实现查询条件的组合及转换的。

以上就是高级查询功能的实现思路及代码,在此抛砖引玉,希望和大家共同探讨。 

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    第 1 楼 中国CZ88.NET 网友 客人 发表于: 2011/12/15 22:27:41
    做系统是先要建表吗,在写这些语句完善?

    支持( 0 ) 盖楼(回复)

    发表评论 查看所有评论(41)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)