2014年3月23日 星期日

[除錯] System.InvalidCastException: System.Data.DataViewManagerListItemTypeDescriptor

原始碼:
Function_A 初始化ComboBox內容選擇值
                DataTable dt=new DataTable("ExchangeRateType");
                dt.Columns.Add("en", typeof(Int16));
                dt.Columns.Add("zh", typeof(string));
                dt.Rows.Add("0", "×(乘)");
                dt.Rows.Add("1", "÷(除)");
                cbo_ExchangeRateType.DisplayMember = "zh";
                cbo_ExchangeRateType.ValueMember = "en";
                cbo_ExchangeRateType.DataSource = dt;

                cbo_ExchangeRateUSDType.DisplayMember = "zh";
                cbo_ExchangeRateUSDType.ValueMember = "en";
                cbo_ExchangeRateUSDType.DataSource = dt.DefaultView ;

Function_B 從資料庫撈資料
                   dt = GetDataSet(OriginFindQry).Tables[0].Copy();
                    dt.TableName = _TblName;
                    if (ds.Tables.Contains(_TblName))
                    {
                        ds.Tables[_TblName].Dispose();
                        ds.Tables.Remove(_TblName);
                    }
                    ds.Tables.Add(dt);

Function_C 為每個控制項DataBinding
            foreach (Control item in this.tableLayoutPanel1.Controls)
            {
                item.DataBindings.Clear();
            }
            txt_CustomerOrderNo.DataBindings.Clear();
            txt_ExchangeRate.DataBindings.Clear();
            txt_ExchangeRateUSD.DataBindings.Clear();
            cbo_ExchangeRateType.DataBindings.Clear();
            cbo_ExchangeRateUSDType.DataBindings.Clear();

            bs_tblT訂單統計資料表.DataMember = null;
            bs_tblT訂單統計資料表.DataSource = null;
            bs_tblT訂單統計資料表.Clear();

            bs_tblT訂單統計資料表.DataMember = _TblName;
            bs_tblT訂單統計資料表.DataSource = ds;
           
            this.bindingNavigator1.BindingSource = bs_tblT訂單統計資料表;
            dataGridView1.DataSource = bs_tblT訂單統計資料表;

            cbo_ExchangeRateType.DataBindings.Add("SelectedValue", bs_tblT訂單統計資料表, "ExchangeRateType");
            cbo_ExchangeRateUSDType.DataBindings.Add("SelectedValue", bs_tblT訂單統計資料表, "ExchangeRateUSDType");



問題: 紫色底為錯誤發生點
(1)錯誤訊息:

            bs_tblT訂單統計資料表.DataMember = null;
            bs_tblT訂單統計資料表.DataSource = null;

            bs_tblT訂單統計資料表.Clear();

========
(2)錯誤訊息:
            //bs_tblT訂單統計資料表.DataMember = null;
            bs_tblT訂單統計資料表.DataSource = null;

            bs_tblT訂單統計資料表.Clear();

========
(3)錯誤訊息: 無法清除這個清單

            //bs_tblT訂單統計資料表.DataMember = null;
            //bs_tblT訂單統計資料表.DataSource = null;

            bs_tblT訂單統計資料表.Clear();

原因:


解決:
cbo_ExchangeRateType.DataBindings.Clear();

參考:
[除錯] 無法繫結至 DataSource 上的屬性或欄位 或 無法清除這個清單
疑難排解例外狀況:System.InvalidCastException
InvalidCastException 類別
关于模板控件如何实现多数据源绑定的问题