顯示具有 DataBinding 標籤的文章。 顯示所有文章
顯示具有 DataBinding 標籤的文章。 顯示所有文章

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 類別
关于模板控件如何实现多数据源绑定的问题

2013年12月24日 星期二

[除錯] 無法繫結至 DataSource 上的屬性或欄位 或 無法清除這個清單

原因:
Error:無法繫結至 DataSource 上的屬性或欄位
            bs_tblT內外銷統計附檔.DataMember = null;
            bs_tblT內外銷統計附檔.DataSource = null;

Error:無法清除這個清單
            bs_tblT內外銷統計附檔.Clear();

解決:
用bindingsource isbindingsuspended


            foreach (Control item in this.tableLayoutPanel1.Controls)
            {
                item.DataBindings.Clear();
            }
            lbl_檔案名稱.DataBindings.Clear();  
            //忘記把這個ctl給DataBindings.Clear()...
            //因為此ctl是屬於flowLayoutPanel2
            //而flowLayoutPanel2是屬於tableLayoutPanel1
            //所以此ctl我需要另外將其DataBindings.Clear()
            //而不是寫在foreach裡面...那邊只會找到flowLayoutPanel2

參考:
我的表單本來可以開啟的,因為我把access資料庫裡的欄位user改成user_1
[除錯] System.InvalidCastException: System.Data.DataViewManagerListItemTypeDescriptor
如何在dataTable更新完成後,才讓綁定的dataGridView 做更新?