none
請教一個DataGridViewComboBox資料顯示的問題 RRS feed

  • 問題

  • 想請教各位一個DataGridViewComboBox資料顯示的問題

    //col1 是 DataGridViewComboBox
    col1.Items.Add("1 國內");  col1.Items.Add("2 國外");
    sqlCn.Open();
    sqlDa = new SqlDataAdapter
           (" select country_type as col1 , area_id as AreaId  from tbRefArea ",  qlCn);
    sqlDa.Fill(ds, "refArea");
    sqlCn.Close();
    dgArea.DataSource = ds.Tables["refArea"];

    顯示時,col1如何預設到select 出來的資料,
    如,select 出來的資料如右( '2'  , '02'),該筆row的col即會選"2 國外"那筆

    如果是一般的Combobox,我是用如下:
    cmbCurrencyId.SelectedIndex = cmbCurrencyId.FindString(txtCurrencyId.Text);

    但DataGridViewComboBox和ComboBox似乎不太同

    謝謝

    2006年11月4日 上午 08:35

解答

  • HI,

    放在DataGridView中的ComboBox欄位必須靠DataBinding技巧才能設定預設選項, 例如:

    DataTable dt = new DataTable();
    dt.Columns.Add("Value", typeof(int));
    dt.Columns.Add("Display", typeof(string));

    dt.Rows.Add( 1, "國內" );
    dt.Rows.Add( 2, "國外" );

    gridColumn.DisplayMember = "Display";
    gridColumn.ValueMember = "Value";
    gridColumn.DataSource = dt;

    grid.Rows[0].Cells[gridColumn.Name].Value = 2; //會顯示[國外]那一項

     

    tihs

    2006年11月5日 上午 12:36

所有回覆

  • HI,

    放在DataGridView中的ComboBox欄位必須靠DataBinding技巧才能設定預設選項, 例如:

    DataTable dt = new DataTable();
    dt.Columns.Add("Value", typeof(int));
    dt.Columns.Add("Display", typeof(string));

    dt.Rows.Add( 1, "國內" );
    dt.Rows.Add( 2, "國外" );

    gridColumn.DisplayMember = "Display";
    gridColumn.ValueMember = "Value";
    gridColumn.DataSource = dt;

    grid.Rows[0].Cells[gridColumn.Name].Value = 2; //會顯示[國外]那一項

     

    tihs

    2006年11月5日 上午 12:36
  • this,你好,
    我的寫法如下:(國內國外類別無基本建檔,所以用dt1代替),但還是無法預設colTypeId,是我的觀念有問題還是那邊我用錯了呢?
    謝謝!

     DataTable dt = new DataTable();
                DataTable dt1 = new DataTable();
                dt1.Columns.Add("TypeId", typeof(String));
                dt1.Columns.Add("TypeDesc", typeof(String));
                dt1.Rows.Add("1", "國內");
                dt1.Rows.Add("2", "國外");
                dt.TableName = "dt";
                dt1.TableName = "dt1";
               
                sqlCn.Open();           
                sqlDa = new SqlDataAdapter
                    (" select country_type as TypeId1 , area_id as AreaId , descp as Descp  from tbRefArea ", sqlCn);
                sqlDa.Fill(dt);
                sqlCn.Close();

                dgArea.DataSource = dt;
                colTypeId.DataSource = dt1;
                colTypeId.DisplayMember = "TypeDesc";
                colTypeId.ValueMember = "tb1.TypeId1";   

    2006年11月6日 上午 04:50
  • HI,

    DisplayMember屬性要填入欲顯示給使用者看的名稱, ValueMember屬性要填入程式欲使用的欄位名稱, 不需要加TableName, 因為DataSource屬性已經填入Table名稱了

    tihs

    2006年11月7日 上午 12:20
  • 謝謝this,
    dt1.colAreaId1應是dt.colAreaId
    因select 出來的資料裏只有類別ID,沒有類別的說明(類別無基本建檔)(dt) , 而我把類別的說明自己用一個table 且建資料,欄位有類別和說明(dt1), 所以我改成DataSource及DisplayMember用dt1,而ValueMember從dt接過來

    目前因此類別只有二個選項,所以,我先改成用CheckBox做,不過這個問題我可能還是要搞懂,會再試看看的,也請各位有建議的可以幫忙。


    謝謝!

    2006年11月7日 上午 01:00
  • 知道怎麼用了

    cmb.DataSource = dt1;     
    cmb.DisplayMember = "Descp";
    cmb.ValueMember = "ZipCode";

    cmb.DataSource = dt2;       //ZipCode的基本檔

    但dt1 與dt2的DisplayMember及ValueMember要同名

    謝謝this的幫忙

     

     

     

    2006年11月9日 上午 08:37