Member 14138551 Ответов: 1

Цикл всех bindingsources и всех наборов данных во всех открытых формах mdichildren


My project is c# WinForms. I have 2 forms in my project, one of them is a MdiParent form and I want to through its MdiChildren forms and if they have a BindingSource I want to make it endedit. And if they have a dataset I want to test it if haschanges or not. Thanks in advance for help.

I tried this code


Что я уже пробовал:

foreach (Form frmm in Application.OpenForms)
        {
                foreach( Control c in frmm.Controls)
                {
                    if (c is BindingSource)
                    {
                        c.endedit();
                    }
                }

        }

foreach (Form frmm in Application.OpenForms)
        {
            foreach (Control c in frmm.Controls)
            {
                if (c is dataset)
                {
                    if (c.HasChanges())
                    {
                        MessageBox.Show("there are a unsaved data")
                    }
                }
            }
        }

1 Ответов

Рейтинг:
7

OriginalGriff

Не обращайтесь непосредственно к элементам управления формой: это противоречит OOPs и может не сработать - если, например, форма помещает свои элементы управления данными в панель или разделитель, например, ваш код не найдет их.

Вместо этого добавьте свойство bool и метод к каждой форме: IsDirty, который говорит: "У меня есть несохраненные данные" и PrepareToClose() (который говорит форме закончить то, что она делает, если что-то происходит).

Самый простой способ - создать базовый класс формы - назовем его SaveForm-и вывести дочерние формы MDI из него, а не непосредственно из формы. Дочерние формы реализуют свойство и метод по мере необходимости в качестве переопределений и выполняют работу сами.

Таким образом, ваш родительский код формы остается более чистым, и вся система становится более надежной и простой в обслуживании позже.


Member 14138551

Большое вам спасибо, я попробую это решение

OriginalGriff

Всегда пожалуйста!