我有一个多到一些与主要细节DataGrid设置混合。DataGridViewComboBoxColumn没有采取ValueMember
- 4的DataGridView
- 6实体(2映射表)
- 5数据关系
为了给你的视觉图像,有1大雇工DGV(DataGridView中),和3小根据雇员DGV选定行进行更新。
3个较小的网格之一是一个非常简单的没有映射表的关系。
然而,另外2个显示映射表的行使用formatedinfo它正在映射到的实体。这两个DGV只有一列,一个带有格式化字符串的组合框(覆盖.ToString()
),它应该具有映射指向的基础对象(EF将在接收整个对象时相应地设置ID)。但是,当我尝试添加新行时,它会说它无法将字符串转换为将对象名称放在这里。这导致我认为如果你没有设置ValueMember,那么组合框将尝试使用.ToString()来获取字符串表示。所以我试图绕过这种行为,通过将Self
属性添加到只返回自己的实体。没有成功,它仍然试图在某处转换字符串。
确切的错误(法语)是:
System.FormatException: Cast non valide de 'System.String' en 'InvInformatique.logiciels'.
从System.String要InvInformatique.logiciels traducts为“无效的转换
代码
InventaireInformatiqueEntities iidb = new InventaireInformatiqueEntities();
bsEmployes.DataSource = iidb.employes;
bsMateriels.DataSource = iidb.materiels;
bsLogiciels.DataSource = iidb.logiciels;
bsLogicielEmployeMaps.DataSource = iidb.logiciel_employe_maps; // Needed to provoke the load query
bsAcces.DataSource = iidb.acces;
bsAccesEmployeMaps.DataSource = iidb.acces_employe_maps; // Needed to provoke the load query
dgvEmployes.AutoGenerateColumns = false;
dgvEmployes.Columns.AddRange(
new DataGridViewTextBoxColumn { Name = "Nom", DataPropertyName = "nom" },
new DataGridViewTextBoxColumn { Name = "Département", DataPropertyName = "departement" }
);
dgvEmployeMateriels.AutoGenerateColumns = false;
dgvEmployeMateriels.Columns.AddRange(
new DataGridViewTextBoxColumn { HeaderText = "Nom", DataPropertyName = "nom" },
new DataGridViewTextBoxColumn { HeaderText = "Satisfaction", Name = "satisfaction", DataPropertyName = "satisfaction" }
);
dgvEmployeAcces.AutoGenerateColumns = false;
dgvEmployeAcces.Columns.AddRange(
new DataGridViewComboBoxColumn { HeaderText = "Accès", DataPropertyName = "acces", DataSource = bsAcces }
);
dgvEmployeLogiciel.AutoGenerateColumns = false;
dgvEmployeLogiciel.Columns.AddRange(
new DataGridViewComboBoxColumn { HeaderText = "Logiciels", DataPropertyName = "logiciels", DataSource = bsLogiciels }
);
dgvEmployes.DataSource = bsEmployes;
dgvEmployeMateriels.DataBindings.Add(new Binding("DataSource", bsEmployes, "materiels"));
dgvEmployeLogiciel.DataBindings.Add(new Binding("DataSource", bsEmployes, "logiciel_employe_maps"));
dgvEmployeAcces.DataBindings.Add(new Binding("DataSource", bsEmployes, "acces_employe_maps"));
。
数据库
个Employes
->id
->nom
->departement
Acces
->id
->nom
->description
Logiciel
->id
->nom
Materiel
->id
->employe_id
->nom
->description
Acces_Employe_Maps
->id
->acces_id
->employe_id
Logiciel_Employe_Maps
->id
->logiciel_id
->employe_id
数据库关系
Employes <-> Logiciel_Employe_Maps <-> Logiciels
Employes <-> Acces_Employe_Maps <-> Acces
Employes -> Materiel