使用Business Objects(2个问题)获取表单的主要详细信息

时间:2010-04-29 21:11:16

标签: c# winforms data-binding

我有一个ListBox和2个DataGridViews。

我有一个

的对象
[Serializable]
public class Process
{
...
    public string ProcessName { get; set; }
    public List<Step> Steps { get; set; }
}

[Serializable]
public class Step
{
...
    public List<StepEvent> StepEvents { get; set; }
}

[Serializable]
public class StepEvent
{
...
    public int EventId { get; set; }
}

我可以连接列表框和第一个网格,但我无法连接第二个网格。我不认为我可以使用DataRelation,因为它的对象不是DataTable

代码到目前为止

        List<Process> processes = new XMLHelper().CreateObject<List<Process>>(GetXmlProcess());

        listProcess.DataSource = processes;
        listProcess.DisplayMember = "ProcessName";
        listProcess.ValueMember = "ProcessName";

        dgSteps.DataSource = processes;
        dgSteps.DataMember = "Steps";


        //List<Step> steps = (from p in processes
        //                    from st in p.Steps
        //                    select st).ToList();

        dgStepEvents.DataSource = processes;
        dgStepEvents.DataMember = "Steps.StepEvents";

无论我制作什么dgStepEvents.DataMember,它都会给我一个错误。正如您所看到的,我尝试过LINQ但是[steps]是一个新对象并且没有链接。

第二个相关问题: 我一直在阅读很多BindableSource,但我认为我不需要这样的东西,因为listview和datagrid已经同步了。

1 个答案:

答案 0 :(得分:1)

你可以用老式的方式连接SelectedIndexChanged事件

    private void listProcess_SelectedIndexChanged(object sender, EventArgs e)
    {
        Process p = listProcess.SelectedItem as Process;
        dgSteps.DataSource = p.Steps;

    }

    private void dgSteps_SelectionChanged(object sender, EventArgs e)
    {
        List<Step> steps = dgSteps.DataSource as List<Step>;

        dgStepEvents.DataSource = steps[dgSteps.CurrentRow.Index].StepEvents;

    }