代码之家  ›  专栏  ›  技术社区  ›  Mike

使用Business Objects(2个问题)Win表单掌握详细信息

  •  0
  • Mike  · 技术社区  · 16 年前

    我有一个列表框和两个datagridview。

    我有一个物体

    [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]是一个新对象,没有链接。

    第二个相关问题:

    1 回复  |  直到 16 年前
        1
  •  1
  •   Rob Rob    16 年前

    你可以用连接SelectIndexChange事件的老方法来实现

        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;
    
        }
    
    推荐文章