西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)其它知識(shí) → 醫(yī)院病人資料管理系統(tǒng)高級(jí)查詢功能分析

醫(yī)院病人資料管理系統(tǒng)高級(jí)查詢功能分析

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2011/4/17 18:50:30字體大小:A-A+

作者:西西點(diǎn)擊:337次評(píng)論:41次標(biāo)簽: 資料管理系統(tǒng)

客戶資料管理系統(tǒng)3.5綠色免費(fèi)版
  • 類(lèi)型:辦公軟件大。1.0M語(yǔ)言:中文 評(píng)分:2.8
  • 標(biāo)簽:
立即下載

在我的共享軟件-病人資料管理系統(tǒng)(該軟件是是一款針對(duì)病人基本情況、手術(shù)情況、化療情況、隨訪情況的存儲(chǔ)、修改維護(hù)、條件查詢、導(dǎo)出導(dǎo)出Excel、科室數(shù)據(jù)合并、圖片查找、數(shù)據(jù)打印、高級(jí)查詢等功能的軟件)中,有時(shí)候資料管理者需要對(duì)多個(gè)條件進(jìn)行組合查詢,由于字段比較多,一般很難滿足客戶的要求,在一個(gè)窗體中列出所有的條件可供查詢,而且一般情況下,很多條件很少用到,把它全部擺到主界面上也顯得不夠美觀和實(shí)用。

我的做法是,只在主界面中列出比較常用的一些條件給客戶進(jìn)行普通的查詢顯示,如下圖所示:

 
而需要更多條件查詢的時(shí)候,把它做成一個(gè)高級(jí)查詢的頁(yè)面,列出所有的字段給用戶選擇,然后可以注冊(cè)多個(gè)條件進(jìn)行查詢,如高級(jí)查詢的界面如下所示:

 

這樣客戶一個(gè)可以方便在常用查詢條件中查詢數(shù)據(jù),第二個(gè)可以當(dāng)有需要的時(shí)候,在所有的字段中組合查詢各種條件來(lái)查詢內(nèi)容,雖然高級(jí)查詢界面做的不算很復(fù)雜,但滿足一般的需求是沒(méi)問(wèn)題了,而且很多客戶使用,也感覺(jué)不錯(cuò),這就足夠了。

說(shuō)完一些總體的內(nèi)容,我們下面開(kāi)看看詳細(xì)的代碼實(shí)現(xiàn),以便給大家提供思路及參考。

1、首先我們?cè)诮缑嫔辖壎ㄏ嚓P(guān)的查詢條件數(shù)據(jù)、字段列表等信息,具體代碼如下所示,其中獲取字段列表的時(shí)候,我們獲取一條記錄,取返回表格數(shù)據(jù)的表頭信息即可:

        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);
                }
            }
        } 

當(dāng)響應(yīng)添加條件的時(shí)候,我們存儲(chǔ)相關(guān)的信息并顯示在ListView里面即可,如下所示。

private void btnAddCondition_Click(object sender, EventArgs e)
        {
            if (this.txtContent.Text.Length == 0)
            {
                if (MessageUtil.ShowYesNoAndTips("查詢內(nèi)容為空,您確認(rèn)要繼續(xù)么?") == 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);
             }
        }

而當(dāng)用戶確定的時(shí)候,我們只需要簡(jiǎn)單的處理一下,給窗體的DialogResult設(shè)置為OK即可。

        private void btnOK_Click(object sender, EventArgs e)
        {
            if (this.listView1.Items.Count == 0)
            {
                if (MessageUtil.ShowYesNoAndTips("條件組合為空,您確認(rèn)要繼續(xù)么?") == DialogResult.No)
                {
                    this.DialogResult = DialogResult.None;
                    return;
                }
            }

            this.DialogResult = DialogResult.OK;
        } 


 而在彈出高級(jí)查詢窗體的父窗口里面,我們這樣操作,判斷窗體返回值是DialogResult是OK的話,那么獲取到相應(yīng)的條件,然后再主界面中查詢即可,代碼如下所示:

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

                BindData(condtion);
            }
        } 


其中 GetAdvanceCondition函數(shù)是高級(jí)查詢窗體里面的函數(shù),主要是根據(jù)已有條件生成給父窗體調(diào)用的,返回響應(yīng)的查詢條件,實(shí)現(xiàn)如下所示:

        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 類(lèi)是我封裝的一個(gè)查詢類(lèi),用來(lái)代替硬編碼等相關(guān)操作,以便方便、準(zhǔn)確、有效的實(shí)現(xiàn)查詢條件的組合及轉(zhuǎn)換的。

以上就是高級(jí)查詢功能的實(shí)現(xiàn)思路及代碼,在此拋磚引玉,希望和大家共同探討。 

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    第 1 樓 中國(guó)CZ88.NET 網(wǎng)友 客人 發(fā)表于: 2011/12/15 22:27:41
    做系統(tǒng)是先要建表嗎,在寫(xiě)這些語(yǔ)句完善?

    支持( 0 ) 蓋樓(回復(fù))

    發(fā)表評(píng)論 查看所有評(píng)論(41)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)