我有一个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已经同步了。
答案 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;
}