2009-06-26 68 views
0

我把一個強類型的數據集表放入一個datagridview。然後添加一列組合框,讓外鍵通過名稱而不是ID來選擇。也許有一個更簡單的方法來做到這一點。爲什麼我的datagridviewcolumn目前不接受更改?

我可以將typeID列轉換爲comboboxcolumn,同時仍可以將數據源轉換回我的強類型數據集表類型?我是否需要從數據源中取回數據,或者對datagridview所做的更改是否會自動返回到數據集?

這段代碼有什麼問題?

FormDg fDg; 
    internal DsTech.TechObjectsDataTable ShowDg(IWin32Window owner, Db db) 
    { 
     fDg = new FormDg(); 

     fDg._dg.DataSource = db.getDs().TechObjects; 
     var TypeSelecter = new DataGridViewComboBoxColumn(); 
     var types = db.getdsObjectTypes(); 
     TypeSelecter.DataSource = types; 
     TypeSelecter.DisplayMember = "type"; 
     TypeSelecter.Name = "Types"; 
     TypeSelecter.ValueMember = "ID"; 
     fDg._dg.Columns["typeID"].DisplayIndex=fDg._dg.Columns.Count-1; 
     fDg._dg.Columns.Add(TypeSelecter); 
     fDg._dg.ReadOnly = false; 
     Application.DoEvents(); 
     for (int i = 0; i < fDg._dg.RowCount; i++) 
     { 
      if ((fDg._dg.Rows[i].Cells["typeID"].Value is DBNull) == false) 
       //Line below does not work 
       UpdateTypesRow(i,(int)fDg._dg.Rows[i].Cells["typeID"].Value); 
     } 
     fDg._dg.CellEndEdit += new DataGridViewCellEventHandler(_dg_CellEndEdit); 


     if (fDg.ShowDialog(owner) == DialogResult.OK) 
     { 
      return (DsTech.TechObjectsDataTable)fDg._dg.DataSource; 
     } 
     else return null; 

    } 

儘管此代碼工作得很好

void _dg_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     if (fDg._dg.Columns[e.ColumnIndex].Name == "Types") 
     { 
      fDg._dg.Rows[e.RowIndex].Cells["typeID"].Value = fDg._dg.Rows[e.RowIndex].Cells["Types"].Value; 
      //update typeID column 

     } 
     else if (fDg._dg.Columns[e.ColumnIndex].Name == "typeID") 
     { 
      //update types column 
      UpdateTypesRow(e.RowIndex,(int) fDg._dg.Rows[e.RowIndex].Cells["typeID"].Value); 
     } 
    } 

這是我分解了2成,以防萬一我正在讀錯代碼,他們實際上是不同

void UpdateTypesRow(int rowIndex, int value) 
    { 
     fDg._dg.Rows[rowIndex].Cells["Types"].Value = value; 
    } 

回答

0

使用vbforums。 com我發現使用綁定源的例子,並確保在設置datagridview的數據源屬性之前添加組合框,並能夠得到這個工作。 The Thread and code in c#

相關問題