none
Combox Autocomplete 設計問題 RRS feed

  • 問題

  • 我遇到一個設計上的問題,在combox上使用AutoComplete的功能
    並且自制一個class作為它的資料來源,Class分別有三個屬性
    PK、Name、Code

    PK-->實際寫入資料庫的值
    Code-->下拉選單關閉,選完後回傳顯示在UI上
    Name-->下拉時顯示畫面的內容

    ex:

    實際DB存     完後下拉清單關閉時         點選下拉Combobox時看到的
        PK               Code                         Code+Name
    -----------------------------------------------------------------
     Pk                     A                             台北市--A
     Pk                     B                             台中市--B
     Pk                     C                             台南市--C
     Pk                     D                             高雄市--D

    點選下拉清單看到 "台北市--A" 主要是要讓使用者下拉馬上就可以看到相對的代碼
    台北市的代碼就是A,但選完希望在combox上顯示A就好了,
    但目前(ValueMember)是用PK綁定,DisplayMember卻不知要用Code或Name,
    用了Code,無法顯示 台北市--A,用了Code+Name 無法達到僅顯示A,

    不知有無辦法可以達到想要的功能,或設計上有錯誤,也可以採用其它方式來達成,

    -謝謝各位- 

    2015年9月17日 上午 02:16

所有回覆

  • 您好,

    您可以一開始時,

    DisplayMember 設為 Code,

    而在顯示 DropDown 時,

    再將 DisplayMember 設為 Code+Name。

    假如我在畫面上拉一個combobox,叫 comboBox1

    private void Form1_Load(object sender, EventArgs e)
    {
    	DataTable dt = new DataTable();
    	dt.Columns.Add("pk", typeof(Int32));
    	dt.Columns.Add("code", typeof(string));
    	dt.Columns.Add("codeName", typeof(string));
    	dt.Rows.Add(1, "A", "A-台北市");
    	dt.Rows.Add(2, "B", "B-新北市");
    	comboBox1.ValueMember = "pk";
    	comboBox1.DisplayMember = "code";
    	this.comboBox1.DataSource = dt;
    }
    
    private void comboBox1_DropDown(object sender, EventArgs e)
    {
    	comboBox1.DisplayMember = "codeName";
    }
    
    private void comboBox1_DropDownClosed(object sender, EventArgs e)
    {
    	comboBox1.DisplayMember = "code";
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2015年9月17日 上午 04:54
  • Hi ,感謝亂兄

    採用你上述的方法,但會產生一個問題,

    因為我combox有使用 AutoComplete功能,

    感覺會產生相衝,導致combobox下拉選單無法點選(下拉選單點不出來)

    可能因為變換顯示,所以AutoComplete 來源變換,錯亂了…

    多加了這兩行

    comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
    comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;


    • 已編輯 菲羽 2015年9月18日 上午 01:56
    2015年9月18日 上午 01:45
  • 那可能就要顯示 CodeName 了。

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2015年9月18日 上午 05:48
    2015年9月18日 上午 05:32