绑定到BindingSource时将新行插入DataGridView

时间:2014-01-07 17:40:15

标签: winforms data-binding datagridview objectdatasource

我很难让复杂的对象数据绑定正常工作。我在表单和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文件中为这些详细信息项提供了数据,则此工作正常,如下所示。编辑过程可以很好地按照您的预期序列化更新。

Here is a pic with data loading and editable

当我尝试添加新的FileMoveProcess时出现问题。包含FileMoveProcess的最左边的DataGridView将正确保存,但是当我尝试在datagridview中添加SourceDetails和DestinationDetails数据时,它们无法为新的FileMoveProcess创建FileMoveProcessDetails对象,因此无法写入xml文件。

Data Failed to be added to the binding source

我错过了什么?

TIA

PS ComboBoxes是Enum数据绑定,因此数据可用于新项目。

2 个答案:

答案 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