none
指定 ComboBox.DataSource 後,為何 Items.Count 屬性還是 0 (確定 來源 DataTable 是有資料的) RRS feed

  • 問題

  • 因為我必須先繫結 ComboBox 的資料來源,然後以 ComboBox 的第一個選項為依據(預設),
    去資料庫撈出相對應的資料;設定好 ComboBox.DataSource 後,為何 ComboBox Items 還是為 0,
    可是 show 出來後,ComboBox 卻有資料?這邊嘗試在 ComboBox 指定 DataSource 後,在指定 SelectedIndex = 0;
    不過會發生錯誤,觀察來源 DataTable ,資料來源是有資料的;請教了。

    抱歉,補上程式碼
    this.cmbSales.ValueMember = "F_ID";
                this.cmbSales.DisplayMember = "F_Name";
                this.cmbSales.BeginUpdate();
                using (SqlConnection oDbConn = new SqlConnection(AppInfo.AppSettings.SQLServerSettings.ConnectionString)) {
                    oDbConn.Open();
                    if (oDbConn.State == ConnectionState.Open) {
                        using (SqlCommand oDbCmd = new SqlCommand()) {
                            oDbCmd.Connection = oDbConn;
                            oDbCmd.CommandType = CommandType.StoredProcedure;
                            oDbCmd.CommandText = "sp_S_Sales_Load";
                            SqlCommandBuilder.DeriveParameters(oDbCmd);
                            oDbCmd.Parameters["@F_ID"].Value = AppInfo.UserID;
                            oDbCmd.Parameters["@F_Role"].Value = AppInfo.UserInfo.UserRole;
                            using (SqlDataAdapter oDbAdapter = new SqlDataAdapter()) {
                                oDbAdapter.SelectCommand = oDbCmd;
    
                                oDbAdapter.Fill(_ComboDT = new DataTable("Default"));
                            }
                        }
                    }
                }
                this.cmbSales.DataSource = _ComboDT;
                this.cmbSales.EndUpdate();
    • 已編輯 阿闊 2010年2月10日 上午 01:24
    2010年2月9日 下午 02:47

所有回覆

  • Hi!

    1. 您目前的程式碼怎麼寫的

    2. Combobox.DataSource 來源資料部分有資料嗎?

    3. 是否有設定ComboBox 物件的ValueMember和DisplayMember屬性值
            ComboBox1.ValueMember = 取得值的欄位名稱
            ComboBox1.DisplayMember = 當做顯示值的欄位名稱


    我的Blog .NET菜鳥自救會
    2010年2月9日 下午 03:49
    版主
  • 若是處於初始化階段取不到 Count 值,可以先存取一次 Control.Handle ,對 .Net 的元件都有用,這是 .Net 元件設計的預設行為。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年2月9日 下午 03:59
  • hi
    可否PO出相關程式碼?
    或嘗試使用中斷點debug看看
    假設你的combobox不在初始化階段,應該不會有這樣的問題。
      DataSet ds = new DataSet();
      comboBox1.DataSource = ds.Tables[0];
      comboBox1.DisplayMember = "Name";
      MessageBox.Show(comboBox1.Items.Count.ToString());
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2010年2月10日 上午 12:00
  • 不知道是不是這樣的狀況,下面的寫法,combobox會有值.

    DataTable dt;
    da.Fill(dt=new DataTable());
    comboBox1.BeginUpdate();
    comboBox1.DataSource = dt;
    comboBox1.DisplayMember = "regiondescription";
    comboBox1.EndUpdate();
    
    但如果在EndUpdate()後面加了一行dt.Dispose();combobox就不會有值.
    DataTable dt;
    da.Fill(dt=new DataTable());
    comboBox1.BeginUpdate();
    comboBox1.DataSource = dt;
    comboBox1.DisplayMember = "regiondescription";
    comboBox1.EndUpdate();
    dt.Dispose();

    2010年2月10日 上午 10:19