2009-06-26 2 views
0

私は強く型付けされたデータセットテーブルをdatagridviewに持ってきています。 IDの代わりに名前で外部キーを選択できるようにコンボボックスの列を追加します。おそらくこれを行う簡単な方法があります。なぜ私のdatagridviewcolumnはこの時点で変更を受け入れないのですか?

データ型を厳密に型指定されたデータセットのテーブル型にキャストできたら、typeID列をコンボボックス列に変換できますか?データソースから戻す必要があるのですか、または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); 
     } 
    } 

だけで正常に動作しますがここで私は念のために私が間違って読んでいたし、彼らはvbforumsを使用し

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

答えて

0

実際に異なっていたに2を織り込んコードです。私はバインディングソースを使用している例を見つけ、DataGridviewのデータソースプロパティを設定する前にコンボボックスを追加して、この作業を行うことができました。 The Thread and code in c#

関連する問題