我很难让复杂的对象数据绑定正常工作。我在表单和1个绑定源上有3个DataGridViews。 BindingSource.DataSource是FileMoveProcesses对象,DataMember是FileMoveProcess对象
public class FileMoveProcesses
{
public List<FileMoveProcess> Processes { get; set; }
}
public class FileMoveProcess
{
public string Name { get; set; }
public bool Disabled { get; set; }
public FileMoveProcessDetails SourceDetails { get; set; }
public FileMoveProcessDetails DestinationDetails { get; set; }
}
还有2个其他DataGridViews具有BindingSource的DataSource,DataMembers分别是SourceDetails和DestinationDetails。如果我已经在xml文件中为这些详细信息项提供了数据,则此工作正常,如下所示。编辑过程可以很好地按照您的预期序列化更新。
当我尝试添加新的FileMoveProcess时出现问题。包含FileMoveProcess的最左边的DataGridView将正确保存,但是当我尝试在datagridview中添加SourceDetails和DestinationDetails数据时,它们无法为新的FileMoveProcess创建FileMoveProcessDetails对象,因此无法写入xml文件。
我错过了什么?
TIA
PS ComboBoxes是Enum数据绑定,因此数据可用于新项目。
答案 0 :(得分:3)
我遇到了同样的问题,并且重申你所要做的就是在默认构造函数中创建List集合的新实例。 :)
public class FileMoveProcesses
{
public FileMoveProcesses()
{
Processes = new List<FileMoveProcess>();
}
public List<FileMoveProcess> Processes { get; set; }
}
public class FileMoveProcess
{
public string Name { get; set; }
public bool Disabled { get; set; }
public FileMoveProcessDetails SourceDetails { get; set; }
public FileMoveProcessDetails DestinationDetails { get; set; }
}
答案 1 :(得分:2)
我认为你必须自己将新对象添加到bindingSource。我创建了一个简单的项目版本,只有2个DGV。我还在dataGridView2 -> DataBindings -> Advanced
当我写一个新的FileMoveProcessDetails
(在右边的网格中)时,我可以保存它,点击一个按钮并调用此代码:
private void button1_Click(object sender, EventArgs e)
{
var myCurrentRow = dataGridView2.Rows[dataGridView2.CurrentRow.Index];
var fmpd = myCurrentRow.DataBoundItem;
var pp = (FileMoveProcess)processesBindingSource.Current;
pp.SourceDetails = (FileMoveProcessDetails)fmpd;
}
它非常原始...但BindingSource已保存,当我导航到其他FileMoveProcessDetails
并返回时,我不会丢失新的FileMoveProcess
。