1. 程式人生 > >C# winform ComboBox繫結資料來源時觸發SelectedIndexChanged事件的處理

C# winform ComboBox繫結資料來源時觸發SelectedIndexChanged事件的處理

ComboBox二級聯動時,發現一個問題。如下
  var wardList = (from ward in alarmInfoList
                            select new
                            {
                                ward.AlarmJQ,
                                ward.AlarmJQName
                            }).Distinct();


            List<WardInfo> wiList = new List<WardInfo>();
            foreach (var ward in wardList)
            {
                WardInfo wi = new WardInfo();
                wi.AlarmJQ = ward.AlarmJQ;
                wi.AlarmJQName = ward.AlarmJQName;
                wiList.Add(wi);
                
            }
             cboWard.DataSource = wiList;
             cboWard.ValueMember = "AlarmJQ";
             cboWard.DisplayMember = "AlarmJQName";
 private void cboWard_SelectedIndexChanged(object sender, EventArgs e)
        {            
            var departmentList = (from department in alarmInfoList
                                  where department.AlarmJQ == cboWard.SelectedValue.ToString()
                            select new
                            {
                                department.AlarmArea,
                                department.AlarmAreaName
                            }).Distinct();

            List<DepartmentInfo> diList = new List<DepartmentInfo>();
            DepartmentInfo diAll = new DepartmentInfo();
            diAll.AlarmArea = -1;
            diAll.AlarmAreaName = "全部";
            diList.Add(diAll);

            foreach (var department in departmentList)
            {
                DepartmentInfo di = new DepartmentInfo();
                di.AlarmArea = department.AlarmArea;
                di.AlarmAreaName = department.AlarmAreaName;
                diList.Add(di);
            }
            cboDepartment.DataSource = diList;
            cboDepartment.DisplayMember = "AlarmAreaName";
            cboDepartment.ValueMember = "AlarmArea";
        }

cboWard繫結完後,會自動觸發一遍SelectedIndexChanged事件,此時cboWard.SelectedValue是
List<WardInfo> wiList = new List<WardInfo>();

裡面的WardInfo物件,而不是想要的

cboWard.ValueMember = "AlarmJQ";
value值,導致cboDepartment沒有資料。

解決方式:

            List<WardInfo> wiList = new List<WardInfo>();
            foreach (var ward in wardList)
            {
                WardInfo wi = new WardInfo();
                wi.AlarmJQ = ward.AlarmJQ;
                wi.AlarmJQName = ward.AlarmJQName;
                wiList.Add(wi);
                
            }
            //去除委託
            cboWard.SelectedIndexChanged -= new EventHandler(cboWard_SelectedIndexChanged);
            cboWard.DataSource = wiList;
            cboWard.ValueMember = "AlarmJQ";
            cboWard.SelectedIndexChanged += new EventHandler(cboWard_SelectedIndexChanged);
            cboWard.DisplayMember = "AlarmJQName";

注意:
            cboWard.SelectedIndexChanged += new EventHandler(cboWard_SelectedIndexChanged);
            cboWard.DisplayMember = "AlarmJQName";
DisplayMember一定要放到增加委託後面,否則聯動失敗。

如有什麼問題,或者更好的方式,希望大家指正!

相關推薦

C# winform ComboBox資料來源觸發SelectedIndexChanged事件處理

ComboBox二級聯動時,發現一個問題。如下 var wardList = (from ward in alarmInfoList sele

winfrom 窗體控制元件實現二級聯動 ComboBox資料來源觸發SelectedIndexChanged事件處理辦法

ComboBox繫結資料來源時觸發SelectedIndexChanged事件的處理辦法 事件,而這個時候使用者並沒有選擇內容,其SelectedValue也不是對應欄位的值。那麼時寫在SelectedIndexChanged中的處理程式碼就會因為SelectedValue的內容不正確引發異常。一般網上找到

c# combobox資料來源

繫結資料來源: private void button2_Click(object sender, EventArgs e) { DataTable table = new DataTable();

資料來源組合框ComboBox.DrawItem的事件處理方法

在一些窗體應用程式中,常常需要重寫組合框控制元件ComboBox的DrawItem事件處理方法,例如:顏色選擇組合框、帶圖示的組合框、調整項間距的組合框,等等。基本步驟如下: 設定ComboBox.DrawMode為OwnerDrawFixed或OwnerDrawVa

.NET控制元件ComboBox資料來源的一個Bug及解決方法

ComboBox常用於繫結到一個數據源表的某個欄位,提供選擇並更新功能。下面用具體例項介紹它的一個Bug及解決辦法。 1、演示Bug的程式碼 窗體Form1上有組合框comboBox1和一個顯示資料表字段的按鈕button1,演示程式碼如下: priva

C#中comboBox資料集後事件中取值出System.data.dataRowView問題

寫了一段程式碼,希望通過comboBox選項自動關聯填充另外兩項輸入框時發現數據獲取異常 comboBox繫結資料來源程式碼如下:             this.cbKHMC.DataSource = dt;             this.cbKHMC.Displa

js中三種事件之間的關係和事件處理函式裡的this值

<!DOCTYPE HTML> <html > <head>     <meta charset="UTF-8"> </head> <body> <div id="b" onclick="cons

C# Winform datagridview控制元件資料來源後列順序混亂

現象描述:                   datagridview控制元件,預設狀態列順序正常。                   單擊查詢按鈕,繫結資料來源後,列順序出現變化。                  (如,正常應該是12345,查詢繫結資料後變為123

c# datagridview資料來源(BindingList<class>)中的現象 待查

現象1: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using Sys

Winform中Combox資料來源 型別作為引數傳遞

//呼叫 IniCombox(cbChannelName, typeof(Model.SystemEnum.ChannelName)); //具體實現 public void IniCombox(Relations.Control.ComBox cb, Type type)

Winform Comobox Dictionary資料來源

使用BindingSource進行間接繫結     Dictionary<string ,string> dic=new Dictionary<string,string>();        

C# DataGridView重新保持上次滾動位置

int currentLine = 0; if (dataGridView.FirstDisplayedScrollingRowIndex >= 0) { currentLine = dataGridView.FirstDisplayedScrollingRo

winform datagridview中combobox列改變選項觸發其他列變化

tro edi fde info sender orm ted exchange pro 之前想使用DataGridView的SelectionChanged事件,但是使用了後並沒有達到效果 最後使用下面的方式實現: private void materialCheckG

C# DataGridView控制元件資料來源的方式

注: 直接新增並繫結資料庫,要刪除的話,需(?)刪除資料庫中的資料,然後重新給DATAGRIDVIEW繫結資料來源,使用dataGridView.Row.Clear()無效。 第一種: DataSet ds=new DataSet (); this.da

C#用 XML 多個ComboBox

0 繫結第一個ComboBox private void Mxdr_Form_Load(object sender, EventArgs e) { string str = @"Total.xml"; //\bin

c# datagridvew資料來源

經過各種百度谷歌搜尋,終於總結出一下幾種繫結datagridview資料來源的方法: 1.說明: 俗稱資料操作多面手,是Microsoft Visual Studio中的一個控制元件。使用 DataGridView 控制元件,可以顯示和編輯來自多種不同型別的資料來源的表格資

c#中手動給dataGridView資料來源的方法

c#中手動給dataGridView繫結資料來源,這中方法操作資料的主要好處就是能夠很自由,但表現資料沒有C#自動新增資料來源那麼方便,不過我們可以手動給dataGridView新增資料來源,如果有興趣,建議你發5分鐘時間研究一下下面的實現方法.      有時為了方便操作資料,我們更願意手動連線資料來源,但

easyUI-combobox 動態資料來源

前臺  <link rel="stylesheet" type="text/css" href="../css/easyui.css"/>  <script type="text/javascript" src="../js/jquery-1.7.1.mi

關於LookUpEdit資料來源和取值

首先在GridControl裡在Repository中新增一個GridLookUpEdit 在設定DisPlayMember(介面顯示欄位) 然後在後臺繫結資料 List<EntityBrand> entityBrand = client.GetBrandList(); this.rep

2018年11月2日 關於dropdownlist,資料來源後顯示system.data.datarowview的問題解決

準備實現兩個dropdownlist二級聯動的功能: 在一個dropdownlist 繫結過資料來源之後顯示,system.data.datarowview,無法顯示從資料庫中查詢到的值。 原因是:  DropDownList4.DataTextField沒有繫結。 &nb