강력하게 형식화 된 데이터 집합 테이블을 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를 고려 코드 그냥 잘 작동하고 그들이 vbforums을 사용하여 실제로
void UpdateTypesRow(int rowIndex, int value)
{
fDg._dg.Rows[rowIndex].Cells["Types"].Value = value;
}