Основная деталь детали с бизнес-объектами (2 вопроса) Win Forms - PullRequest
0 голосов
/ 30 апреля 2010

У меня есть 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] - это новый объект, который не связывается.

2-й связанный вопрос: Я много читал BindableSource, но подумал, что мне не нужно что-то подобное, поскольку просмотр списка и сетка данных уже синхронизированы.

1 Ответ

1 голос
/ 30 апреля 2010

Вы можете сделать это по старинке, подключив событие 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;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...