2014-01-07 2 views
1

복잡한 개체 데이터 바인딩이 올바르게 작동하는 데 어려움이 있습니다. 3 DataGridViews 폼 및 1 바인딩 소스가 있습니다. BindingSource.DataSource는 FileMoveProcesses 객체이며, BindingSource에와 DataMembers의 데이터 소스를 가지고이 다른 DataGridViews 각각 SourceDetails 및 DestinationDetails가되어있는 DataMember를이 FileMoveProcess 객체BindingSource에 바인딩 된 DataGridView에 새 행 삽입

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

입니다. 아래에서 볼 수있는 것처럼 이러한 세부 항목에 대한 XML 파일에서 이미 데이터를 사용할 수있는 경우이 작업이 적절합니다. 편집 프로세스는 예상대로 업데이트가 직렬화되어 작동합니다.

Here is a pic with data loading and editable

문제는 내가 새로운 FileMoveProcess을 추가 할 때 제공됩니다. 맨 왼쪽 FileGoveView FileMoveProcess 포함 올바르게 저장됩니다 있지만 DataGridview SourceDetails 및 DestinationDetails 데이터를 추가 할 때 그들은 FileMoveProcessDetails 개체를 새 FileMoveProcess 만들기 위해 실패합니다 그래서 xml 파일에 쓸 수 없습니다.

Data Failed to be added to the binding source

어떻게 그리워 했습니까? 데이터는 새로운 아이템 사용할 수 있도록

TIA

추신 선택 상자를 열거 바인딩이다.

+0

그래서 세부 묘사를 채우고 저장을하면 어떻게됩니까? 디버그 할 때'FileMoveProcessDetails' 객체가 현재'FileMoveProcess'에 첨부되어 있거나 null 인 것을 볼 수 있습니까? – Vland

+0

소스 또는 대상 세부 정보 그리드가 포커스를 잃을 때 입력 된 모든 데이터가 지워집니다. – Tim

+0

업데이트. DataGrid 속성의 DataBinding/Advanced 섹션에 가서 "none"으로 바인딩 드롭 다운으로 다시 설정했습니다. 이렇게하면 포커스를 잃을 때 지워지는 격자의 문제가 해결되었습니다. 이제 저장을 클릭하면 세부 정보 개체가 null입니다. – Tim

답변

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가 저장되고 다른 FileMoveProcess로 돌아가서 다시 돌아올 때 내 새 FileMoveProcessDetails을 잃지 않습니다.

+0

감사합니다. Vland. 그것은 트릭을했다. 나는 BindingSource가 그것을 처리했다고 가정했다. – Tim

1

나는 동일한 문제를 일으켰고 당신이해야 할 일은 기본 생성자에서 List collecion의 새 인스턴스를 만드는 것 뿐이라고 확신했다. :)

+0

그걸 +1하려고합니다. 그것은 내가 전에 놓친 것이고 도움이되었을 것입니다. 게시물 주셔서 감사합니다. – Tim

관련 문제