[C#][WinForm]DataGridView如何動態加入下拉選單

[C#][WinForm]DataGridView如何動態加入下拉選單

前幾天User希望DataGridView某個欄位可以改成下拉選單,

後來翻一下MSDN,發現動態加入DataGridViewComboBoxColumn並不難,紀錄一下。

 

初始畫面:

image

User希望ZIPCODE可以改成下拉選單,並顯示地區名稱。

 

完成畫面:

image

image

 

 

image

 

initData:

 private void initData(string strconn)
        {
          DataTable dt=new DataTable ();
          using( SqlConnection conn = new SqlConnection( strconn ) )
          {
              using( SqlDataAdapter da = new SqlDataAdapter( "select * from dbo.userm", conn ) )
              {
                  try
                  {                           
                      da.Fill( dt );
                  }
                  catch( SqlException sqlex )
                  {
                      throw new Exception( sqlex.Message );
                  }
                  catch( Exception ex )
                  {
                      throw new Exception( ex.Message );
                  }         
              }                    
          }
          dataGridView1.DataSource = dt;           
        }

 

 

FormatColumn:

private void FormatColumn( string strconn )
        {
            dataGridView1.Columns.Remove( "ZIPCODE" ); 
            DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
            DataTable dt = new DataTable();  
            using( SqlConnection conn = new SqlConnection( strconn ) )
            {
                using( SqlDataAdapter da = new SqlDataAdapter( "select * from dbo.codes", conn ) )
                {
                    try
                    {                             
                        da.Fill( dt );
 
                    }
                    catch( SqlException sqlex )
                    {
                        throw new Exception( sqlex.Message );
                    }
                    catch( Exception ex )
                    {
                        throw new Exception( ex.Message );
                    }     
                }
                           
            }
            combo.DisplayIndex = 1;
            combo.HeaderText = "ZIPCODE";
            combo.DataPropertyName = "ZIPCODE";//資料行名稱
            combo.DisplayMember = "ZONENAME";//顯示清單選項內容
            combo.ValueMember = "ZIPCODE"; //清單選項對應的值
            combo.DataSource = dt;
            dataGridView1.Columns.Insert( 1, combo );           
        }        

 

參考

DataGridViewComboBoxColumn 類別