Member 13861271 Ответов: 1

C# - как получить доступ и обновить данные datagridview из другого пользовательского элемента управления


У меня есть приложение, которое имеет 2 usercontrols

В первом usercontrol есть datagridview, и внутри него есть функция, которая получает данные и заполняет datagridview.
public void getdata()
        {
            //get data and fill datagrid view...
        }

Эта функция вызывается при загрузке usercontrol

Во 2-м пользовательском контроле, после выполнения регистрации и т. д. Я хочу снова вызвать функцию getdata (), чтобы datagridview был обновлен в 1-м usercontrol.

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

так вот что я попробовал:

Code_Sign uc = new Code_Sign();
uc.getdata();

//code_sign is name of 1st usercontrol

При этом вызывается функция (я проверил это, поместив в функцию msgbox. Появится окно msgbox)

Однако проблема вот в чем. Представление datagrid не имеет никаких изменений, например, новые данные не вставляются в представление DataGrid. Отображаются те же самые старые данные.

в функции getdata (). У меня есть

bunifuCustomDataGrid1.Rows.Add(
                new object[]
                {
                    issuer,
                    data,
                    x509.SerialNumber,
                    x509.FriendlyName
                }
                );

(Я также проверил это с помощью обычного datagridview вместо bunifudatagrid. Это не работает)

Я установил модификатор представления datagrid в public, но я просто не могу заставить его работать каким-либо образом.

Любая помощь была бы признательна. Я не знаю, чего мне не хватает. Может быть, есть и другой путь, о котором я не знаю.

Заранее спасибо

1 Ответов

Рейтинг:
0

OriginalGriff

Основной ответ: не надо.
Элемент управления пользователя должен знать о себе и содержащихся в нем элементах управления: он не должен знать о форме, которая его содержит (потому что это может быть другой элемент управления пользователя, например), и он, конечно же, не должен знать о других элементах управления, которые могут быть в родительской форме.
Вместо этого он вызывает событие, которое обрабатывает родительский элемент управления / форма, и решает, что с ним делать.
В вашем случае второй элемент управления UserControl сигнализирует о "зарегистрированном" событии, родительская форма обрабатывает его, получает все соответствующие регистрационные данные из элемента управления и передает их первому элементу управления UserControl для обновления.

Видеть здесь: Передача информации между двумя формами, Часть 3: Ребенок ребенку[^] - он имеет дело с формами, но это точно такая же процедура и код для UserControls.


Member 13861271

Спасибо за ответ. Мне нравится подход, который вы мне показали. Тем не менее, я думаю, что это больше работы, чем нужно, чтобы сделать это таким образом. В моем случае. (на мой взгляд) самый простой подход был бы. Когда кто-то регистрируется, пусть 2-й usercontrol сигнализирует первому пользовательскому элементу управления, что пришло время обновить его. (На самом деле нет необходимости передавать данные), как если бы первый пользовательский элемент управления просто запускал функцию getdata() внутри него. все это будет обновлено. Считаете ли вы, что это хороший подход, и если да, то, возможно, если у вас есть примерный пример для него. Я, кажется, не могу понять это самостоятельно. Любая помощь приветствуется. Спасибо

OriginalGriff

Итак, позвольте мне подвести итог: у вас есть плохая идея, я объясняю, почему это плохая идея, и показываю вам, как это сделать правильно, с готовым кодом и примером приложения, вы хотите игнорировать все это и реализовать плохую идею в любом случае, и вы хотите, чтобы я написал код для реализации плохой идеи для вас, потому что вы не знаете, как заставить ее работать?

Member 13861271

Я буквально только что спросил, Хороший ли это подход или нет. и если это хороший подход, то помогите мне с ним, потому что это имело больше смысла для меня. Мне не нужна твоя помощь, если ты не можешь быть милым.

OriginalGriff

- Мне нравится подход, который вы мне показали. Тем не менее, я думаю, что это больше работы, чем нужно сделать ..."
Как вы думаете, как это звучит, кроме "Вы хотите игнорировать все это и реализовать плохую идею в любом случае, и вы хотите, чтобы я написал код для реализации плохой идеи для вас, потому что вы не знаете, как заставить ее работать?"

Это не я "нехорошо себя веду", а ты говоришь мне "чушь собачья"...

Member 13861271

"Как вы думаете, это хороший подход?" вы могли бы буквально сказать: "нет, этот подход нехорош, потому что "причина", и вы должны делать то, что я упомянул выше " я все еще изучаю C#, и я просто хотел обсудить это с кем-то, кто знает больше и учится у него. Наверное, нет. Это был бы очень ценный ответ вместо того, что вы на самом деле ответили мне.

OriginalGriff

Хммм....
- Основной ответ таков: не надо."
Далее следуют причины, почему и ссылка на лучшее объяснение с полным исходным кодом...

Затем вы возвращаетесь со словами: "Нет, мне нужна моя идея. Дайте мне код для этого."

Я бы посоветовал вам подумать о том, как вы сюда доберетесь.
Конец дискуссии.

Member 13861271

Я не знаю, откуда ты получаешь информацию. но в первоначальном вопросе я даже не упомянул ничего о другом подходе, который я упомянул позже. В вопросе явно было что - то совсем другое, чем то, о чем я спросил позже. (если они похожи, очевидно, я спросил, потому что думал, что это не так, и вы могли бы просто сказать: "это одно и то же", но, очевидно, вы не хотите быть очень полезным)
- Нет, мне нужна моя идея. Дайте мне код для этого."
и еще раз, вы игнорируете то, что я на самом деле просил, и просто делаете ложные предположения.
"Как вы думаете, это хороший подход, и если да, то, может быть, если у вас есть примерный пример для него", - сначала я спросил, хорош ли этот подход, и я сказал "Может быть" и пример кода. никогда не требовал никакого кода, написанного для моей точной цели.