none
關於DataGridView的ComboBoxColumn問題 RRS feed

  • 問題

  • 我用的開發工具是 VS2005 STD
    請問一下...
    DataGridView 的 DataGridViewComboBoxColumn 這種屬性的欄位...
    是否只能在程式裡..
    利用 DataTable (或是連結資料)去新增資料到ComboBox的清單裡....
    有沒有辦法在開發工具的設計階段就去給定要"顯示的文字"與"代表的值"???
    我從【編輯資料行】工具視窗裡...
    在 Items 屬性中..也只能增加它"顯示的文字"...不能給"代表的值"...
    在程式裡..如果用 .Items.ADD...也只能給顯示的文字....
    ComboBoxColumn...是否只能透過連結資枓...
    指定 DisplayMember 與 ValueMember 來給定????
    感恩啊~~
    2007年10月11日 上午 09:43

解答

  •  

    Dear 初學者1119

    如果你想要在Design-Time時處理這些東西,最簡單的方式就是去買一套3-Party元件

    這些功能,還有一些更好用的功能都有了。一套台幣大約1-3萬,但是可以讓你的開發時間減少,功能加強,也不用維護,其實我覺得還蠻好的

     

    就像我們公司現在用的這一套,覺得還不錯:Infragistics

     

    希望對你有所幫助

    Kevin, Tsui

    2007年10月15日 下午 04:52

所有回覆

  • HI,

     

    您可以做一個類別, 內含一個數值變數(當做ValueMember)和一個字串變數(當做DisplayMember), 如下:

     

    Public Class ValueDescriptionPair
     
        Public Value As Object
        Public Description As String
     
        Public Sub New(ByVal NewValue As Object, ByVal NewDescription As String)
             Value = NewValue
            Description = NewDescription
        End Sub
     
        Public Overrides Function ToString() As String
            Return Description
        End Function
     
    End Class

     

    再透過以下的語法加入資料到ComboBox中

     

    ComboBox1.Items.Add(New ValueDescriptionPair(1, "first item"))
        

    tihs

    2007年10月12日 下午 02:11
  • Dear 初學者1119:

    我再補充一些細節,如果你想在程式碼內產生DataGridView中Combo的值

     

    程式碼區塊

    //此段跟tihs是類似的意思,因為不使用DataTable,故需自行建立一個類別,用來儲存Combo的Data

        public class ComboData
        {
            private string m_display = string.Empty;
            private string m_value = string.Empty;

            public ComboData(string display, string value)
            {
                this.m_display = display;
                this.m_value = value;
            }
            public string Display
            {
                get { return this.m_display; }
                set { this.m_display = value; }
            }
            public string Value
            {
                get { return this.m_value; }
                set { this.m_value = value; }
            }
        }

     

         //Form_Load事件中撰寫下列程式碼

         private void Form_Load(object sender, EventArgs e)
         {
                //新增一個欄位

                if (!this.grid.Columns.Contains("Sex"))
                {
                    DataGridViewComboBoxColumn cboSex = new DataGridViewComboBoxColumn();
                    DataGridViewComboBoxCell cellSex = new DataGridViewComboBoxCell();


                    //利用自訂類別,新增Combobox的下拉選單資料
                    cellSex.Items.Add(new ComboData("男", "M"));
                    cellSex.Items.Add(new ComboData("女", "W"));

                   //指定ComboBox,顯示欄位要Binding的屬性 - 此屬性必須存在於你自訂的類別中

                    cellSex.DisplayMember = "Display";
                    cellSex.ValueMember = "Value";

                    cboSex.CellTemplate = cellSex;
                    cboSex.HeaderText = "姓別";
                    this.grid.Columns.Add(cboSex);
                }
         }

     

     

    希望對你有所幫助

    Kevin, Tsui

    2007年10月13日 下午 07:23
  • 謝謝各位大大...
    可能我說得不是很清楚...
    其實我想要的是...不要在程式碼裡建立 ComboxColumn 的相關資料...
    我想要在設計應用程式外觀那個地方...
    去加入ComboxColumn的值與顯示文字...
    目前我看到VS2005在dataGridView 屬性裡..只提供了items的輸入...
    可是items的輸入只能key顯示的文字..不能key代表值...
    不知有沒有方法可以讓我在設計畫面那裡..直接給DisplayMember與ValueMember??

    另外..如果是要在程式裡加入的話..
    我在網路上有找到一個方法..不用自已寫類別...
    程式碼如下...給大家參考看看...

            Dim Column2 As New DataGridViewComboBoxColumn
            Dim myArrayList2 As New ArrayList
            myArrayList2.Add(New DictionaryEntry("Name", "1"))
            myArrayList2.Add(New DictionaryEntry("Name2", "2"))
            Column2.DataSource = myArrayList2
            Column2.DisplayMember = "KEY"
            Column2.ValueMember = "Value"
            Me.DataGridView1.Columns.Add(Column2)


    另外...在設計畫面真的無法給定..
    DisplayMember與ValueMember??
    這樣在程式裡加欄位...會加到死啊...@@
    2007年10月15日 上午 08:49
  •  

    Dear 初學者1119

    如果你想要在Design-Time時處理這些東西,最簡單的方式就是去買一套3-Party元件

    這些功能,還有一些更好用的功能都有了。一套台幣大約1-3萬,但是可以讓你的開發時間減少,功能加強,也不用維護,其實我覺得還蠻好的

     

    就像我們公司現在用的這一套,覺得還不錯:Infragistics

     

    希望對你有所幫助

    Kevin, Tsui

    2007年10月15日 下午 04:52
  • 嗯..看樣子是無法在設計階段去做了...
    只好乖乖寫程式嚕...^^"
    2007年10月17日 上午 09:28