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;
}