Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468

Приложение MVVM. Диалог добавления/редактирования товара: получение данных, вызов, взаимодействие с VM и прочее

09.03.2023, 14:42. Показов 9334. Ответов 207
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В этой теме обсуждается только вопросы по реализации Диалога редактирования товара и связанных с этим действиях .
Основная тема: Приложение MVVM. VMs и навигация
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я изначально предлагал другой вариант, гораздо проще реализуемый:
Просто в одном варианте задания были требования по реализации редактирования с помощью контекстного меню. Вот поэтому я и заинтересовался. К тому же хотелось получить какой-то опыт работы с ним

Добавлено через 3 минуты
Меня интересует маппер. Он инициализирует свойства составного типа такие как Manufacturer?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.03.2023, 14:42
Ответы с готовыми решениями:

Приложение MVVM. Контекстное меню (удаление, редактирование) для элемента (Товара) в ListBox
Да, для добавления будет отдельная кнопка где-то сверху. А для редактирования давайте создадим контекстное меню для каждого элемента. Хотя...

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

Взаимодействие с базой данных в MVVM
У меня есть класс, в котором реализована логика взаимодействия с БД, все таблицы хранятся в этой структуре в памяти. Этот класс...

207
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
17.03.2023, 22:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от INexteR Посмотреть сообщение
то можно при загрузке это самое контекстное меню настроить один раз, допустим, удалить лишние пункты,
Я не понимаю, почему вы непременно хотите сделать на Шарпе, то что достаточно легко реализуется в XAML.
И логически вы ещё неверно делаете возлагая функции БЛ на View.

Вот ответьте на вопрос, что будет, если сделать другую реализацию View в которой будет игнорироваться Role и вызываться любые методы редактирования для гостя?

Добавлено через 2 минуты
Вот такая аналогия.
В отеле много номеров, у каждого свой ключ. Гость может своим ключом открыть только свою дверь. Всё понятно, логично.

Вы же строите - все двери без ключей и каждому гостю сообщается в какие номера он не может заходить.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
17.03.2023, 22:28  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
почему вы непременно хотите сделать на Шарпе, то что достаточно легко реализуется в XAML.
Что я хочу сделать? И что такое БЛ?
Я просто не хочу прогонять каждый элемент через триггер или конвертер, ни к чему вообще делать эту лишнюю работу. И предпочитаю удалить элемент, а не скрыть, потому что при скрытии он все равно остается в памяти и тратит ресурсы. Незачем это. Через xaml я не могу удалить, поэтому приходится подключать код. И для перехода к диалогу мы ставили кликеры, я их как-то не захотел переписывать на команды

Добавлено через 3 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы же строите - все двери без ключей и каждому гостю сообщается в какие номера он не может заходить.
Я не понял, где я такое делаю....
И фиксацию отправил, можете посмотреть при желании
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
17.03.2023, 23:10
Цитата Сообщение от INexteR Посмотреть сообщение
И что такое БЛ?
Бизнес логика.

Добавлено через 35 секунд
Цитата Сообщение от INexteR Посмотреть сообщение
И фиксацию отправил, можете посмотреть при желании
Я перед этим смотрел - последняя была от 15-го.

Добавлено через 3 минуты
Цитата Сообщение от INexteR Посмотреть сообщение
можете посмотреть
В IUser должно быть свойство int RoleId.
IRole Role - это опциональное поле. Может быть или не быть.

Добавлено через 15 минут
INexteR, я вам пишу о том, что сначала в Модели нужно реализовать:
C#
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    public partial class Shop : IProductsSource
    {
        public event NotifyListChangedEventHandler<IProduct> ProductChanged = (_, _) => { };
 
        private void RoleVerifyAccess(Rights rights, [CallerMemberName] string methodName = "")
        {
            if (!RoleCheckAccess(rights))
                throw new MethodAccessException($"Доступ к методу "{methodName}" для роли {CurrentUser?.Role.Name ?? "null"} запрещён;");
        }
        public bool RoleCheckAccess(Rights rights)
        {
            return CurrentUser?.Role.Rights is Rights currentRights && (currentRights & rights) == rights;
        }
 
        public void Add(IProduct product)
        {
            RoleVerifyAccess(Rights.Adding);
 
            Product @new = product.Create<Product>();
            @new.Id = 0;
Добавлено через 47 секунд
И так же во всех остальных методах изменения.

Добавлено через 16 минут
А в VM создать зависимость состояния команд от прав:
C#
68
69
70
71
72
73
74
75
76
        private bool AddProductCanExecute(IProduct parameter)
        {
            return _shop.RoleCheckAccess(Rights.Adding);
        }
 
        private void AddProductExecute(IProduct product)
        {
            _shop.Add(product);
        }
Добавлено через 1 минуту
C#
13
14
15
16
17
18
19
20
21
22
23
24
        public ProductsViewModel(IShop shop)
        {
            _shop = shop;
            _shop.ProductChanged += OnProductChanged;
            _shop.SourcesLoadedChanged += OnSourcesChanged;
            _shop.AuthorizationChanged += OnAuthorizationChanged;
        }
 
        private void OnAuthorizationChanged(object? sender, AuthorizationChangedArgs e)
        {
            AddProduct.RaiseCanExecuteChanged();
        }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
18.03.2023, 08:55
INexteR, реализация, что я показал, это только демонстрация в какую сторону нужно её развивать.
Попробуйте сами проанализировать её отличие от вашей в View, дать им оценку.
И подумать какие есть в ней концептуальные проблемы и как дальше её следует развить.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
18.03.2023, 13:05  [ТС]
Доброе утро
Цитата Сообщение от Элд Хасп Посмотреть сообщение
её отличие от вашей в View
Но а Вы смотрели последнюю фиксацию?
И погодите, здесь Вы пишете про саму команду добавления. Но ведь меня озадачивают пункты, которые только открывают диалог с этой командой. То есть сами по себе они не выполняют это действие за исключением пункта удаления

Добавлено через 6 минут
И ещё вопрос, по заданию сказано ввести ограничение по пикселям для изображения. Какой слой должен выполнять проверку?

Добавлено через 3 часа 17 минут
То есть разметка у меню следующая, здесь нет установки команд, так как пункты являются посредниками
XML
1
2
3
4
5
6
7
8
9
10
11
<ContextMenu x:Key="contextMenu"
             Style="{StaticResource ctrlStyle}">
    <MenuItem Header="Редактировать"
              Click="{x:Static local:ProductsViewHelper.OnUpdateProductClick}" />
 
    <MenuItem Header="Копировать"
              Click="{x:Static local:ProductsViewHelper.OnCopyProductClick}" />
 
    <MenuItem Header="Удалить"
              Click="{x:Static local:ProductsViewHelper.OnDeleteProductClick}" />
</ContextMenu>
Добавлено через 4 минуты
И да, я добавил в модель методы и для самих команд CanExecuteHandler. Решил далее в ViewsHelper написать такой Loaded обработчик
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static RoutedEventHandler ContextMenuSetup { get; } = (s, e) =>
{
    var userControl = (UserControl)s!;
    var contextMenu = (ContextMenu)userControl.Resources["contextMenu"];
    var viewModel = (IProductsViewModel)userControl.DataContext;
    if (!viewModel.RemoveProduct.CanExecute(null))
        contextMenu.Items.RemoveAt(2);
    if (!viewModel.AddProduct.CanExecute(null))
        contextMenu.Items.RemoveAt(1);
    if (!viewModel.UpdateProduct.CanExecute(null))
        contextMenu.Items.RemoveAt(0);
    if (contextMenu.Items.Count is 0)
        userControl.Resources.Remove(nameof(contextMenu));
};
Но тут проблема в том, что ваша реализация команды не пропускает null в качестве параметра и всегда выдает false
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
18.03.2023, 13:06
Цитата Сообщение от INexteR Посмотреть сообщение
по заданию сказано ввести ограничение по пикселям для изображения. Какой слой должен выполнять проверку?
Тот который копирует файлы картинок.
Это отдельная задача. Может решать через BitMap или BitmapImage (DecodePixel).

Цитата Сообщение от INexteR Посмотреть сообщение
Вы смотрели последнюю фиксацию?
Поверхностно.
Пока не было времени.
Сегодня тоже по работе занят.

Добавлено через 1 минуту
Цитата Сообщение от INexteR Посмотреть сообщение
То есть разметка у меню следующая, здесь нет установки команд, так как пункты являются посредниками
Это я понял.

Я и пытаюсь вас подтолкнуть к мысли, что вы строите логику "от View", а нужно строить "от Модели".
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
18.03.2023, 13:10  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я и пытаюсь вас подтолкнуть к мысли, что вы строите логику "от View", а нужно строить "от Модели".
Если от модели, то я там могу создать свойства CanAdd, CanUpdate, CanDelete. Или могу в VM создать метод RoleCheckAccess, который будет вызывать такой же метод из модели
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
18.03.2023, 13:16
Вот возьмите более реалистичный пример, когда есть десяток разных ролей, групп ролей, несколько десятков их прав.
Вы собираетесь всё это обрабатывать в View?

View только представляет данные.
Если доступ для какого-то метода для какой-то роли запрещён, то это должна запрещать Модель.
И в WPF в типичный механиpv для этого - это команды.
Как сделать чтобы пункты меняю или кнопки с запрещёнными командами не показывались - вот это задача View.
Но для начала нужны сами эти команды.
А так как будут использоваться команды, то с высокой вероятностью реализация через кликеры будет неподходящей.

Добавлено через 1 минуту
Цитата Сообщение от INexteR Посмотреть сообщение
Если от модели, то я там могу создать свойства CanAdd, CanUpdate, CanDelete.
Правильно.
И вызовов этих методов должен происходить после событии изменения авторизации о чём нужно указать в интерфейсе IShop.

Добавлено через 1 минуту
Цитата Сообщение от INexteR Посмотреть сообщение
Или могу в VM создать метод RoleCheckAccess, который будет вызывать такой же метод из модели
В VM лучше добавить зависимость состояния команды от метода Модели.
И вызывать ревалидацию команды при изменении авторизации.

Добавлено через 2 минуты
Цитата Сообщение от INexteR Посмотреть сообщение
И да, я добавил в модель методы и для самих команд CanExecuteHandler. Решил далее в ViewsHelper написать такой Loaded обработчи
Зачем удаляете пункты? Их же проще коллапсировать.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
18.03.2023, 13:22  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А так как будут использоваться команды, то с высокой вероятностью реализация через кликеры будет неподходящей.
То есть в разметке выше нужно обработчики заменить на команды? Но все же это псевдокоманды

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Зачем удаляете пункты? Их же проще коллапсировать.
↓↓↓
Цитата Сообщение от INexteR Посмотреть сообщение
предпочитаю удалить элемент, а не скрыть, потому что при скрытии он все равно остается в памяти и тратит ресурсы
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
18.03.2023, 14:33
Цитата Сообщение от INexteR Посмотреть сообщение
он все равно остается в памяти и тратит ресурсы
Не заметил этого вашего сообщения.
В WPF на этом экономить бессмысленно.
Там создаются постоянно сотни и тысячи элементов.
Из-за пары элементов контекстного меню ничего не изменится. Это как сэкономить доллар при покупке мерседеса.

Добавлено через 3 минуты
Цитата Сообщение от INexteR Посмотреть сообщение
То есть в разметке выше нужно обработчики заменить на команды? Но все же это псевдокоманды
Один из вариантов - это реализация через RoutedCommand? которую я показывал.
Другой - оставить кликеры, но дополнительно прокидывать зависимость от состояния команды.

Мне кажется на командах получится проще.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
18.03.2023, 14:55  [ТС]
Элд Хасп, добавил в модель и VM по три свойства
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static RoutedEventHandler ContextMenuSetup { get; } = (s, e) =>
{
    var userControl = (UserControl)s;
    var contextMenu = (ContextMenu)userControl.Resources["contextMenu"];
    var viewModel = (IProductsViewModel)userControl.DataContext;
    if (viewModel.CanDelete)
        return;
    if (viewModel.CanUpdate)
    {
        contextMenu.Items.RemoveAt(2);
        contextMenu.Items.RemoveAt(1);
    }
    else if (viewModel.CanAdd)
    {
        contextMenu.Items.RemoveAt(2);
        contextMenu.Items.RemoveAt(0);
    }
    else
        userControl.Resources.Remove("contextMenu");
};
Добавлено через 9 минут
Вы понимаете в чем проблема? В том что нет смысла ставить на основные команды состояние. Его нужно определять предшествующим команде элементам, открывающим диалог

Добавлено через 9 минут
И в то же время, даже если делать основной команде состояние и псевдокоманде его "похищать", далее скрывать эти элементы в контекстном меню, то в случае гостя оно останется пустым, но при этом продолжит появляться.
Короче, я уже не знаю, как иначе можно сделать, но если вам мой данный подход не нравится, переделайте, а я посмотрю.
Отправил ещё одну фиксацию
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
18.03.2023, 15:33
Цитата Сообщение от INexteR Посмотреть сообщение
то в случае гостя оно останется пустым
Для гостя его вовсе не должно быть?
Или выводить тип предупреждения "У вас не хватает прав для редактирования"?

Добавлено через 34 секунды
Цитата Сообщение от INexteR Посмотреть сообщение
переделайте, а я посмотрю.
Как будет время....
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
18.03.2023, 16:32  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для гостя его вовсе не должно быть?
Ну да, зачем ему видеть маленький пустой прямоугольник
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
18.03.2023, 17:34
Цитата Сообщение от INexteR Посмотреть сообщение
Ну да, зачем ему видеть маленький пустой прямоугольник
Не пустой, а какое-то сообщение.
Например, админ зашёл под гостевым для каких-то нужд.
Чё-то там делает, увидел что нужно внести исправление, ПКМ - и ничего. "Не работает! Чё за фигня и т.п.", а то что под другим логином зашёл = забыл.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
18.03.2023, 23:29  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Не пустой, а какое-то сообщение.
Пусть его не будет вообще. А роль можно выводить в верхней области окна

Добавлено через 26 минут
Цитата Сообщение от INexteR Посмотреть сообщение
Но тут проблема в том, что ваша реализация команды не пропускает null в качестве параметра и всегда выдает false
Для меня это на самом деле проблема

Добавлено через 5 часов 4 минуты
Элд Хасп, возможно, что ранее Вы имели в виду такую реализацию:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<BooleanToVisibilityConverter x:Key="booleanToVisibility"/>
<ContextMenu x:Key="contextMenu"
             Style="{StaticResource ctrlStyle}">
    <MenuItem Header="Редактировать"
              Command="{x:Static local:ProductsViewHelper.Update}"
              CommandParameter="{Binding RelativeSource={RelativeSource Self}}"
              Visibility="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={StaticResource booleanToVisibility}}"/>
 
    <MenuItem Header="Копировать"
              Command="{x:Static local:ProductsViewHelper.Copy}"
              CommandParameter="{Binding RelativeSource={RelativeSource Self}}"
              Visibility="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={StaticResource booleanToVisibility}}" />
 
    <MenuItem Header="Удалить"
              Command="{x:Static local:ProductsViewHelper.Delete}"
              CommandParameter="{Binding RelativeSource={RelativeSource Self}}"
              Visibility="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={StaticResource booleanToVisibility}}" />
</ContextMenu>
Одна из команд в ProductsViewHelper
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public static RelayCommand<FrameworkElement> Update { get; } = new(UpdateExecute, UpdateCanExecute);
 
private static bool UpdateCanExecute(FrameworkElement element)
{
    var (viewModel, product) = GetData(element);
    return viewModel.UpdateProduct.CanExecute(product);
}
 
private static void UpdateExecute(FrameworkElement element)
{
    var (viewModel, product) = GetData(element);
    AddOrUpdateProductDialog.Update(product, viewModel);
}
(CanExecute у всех этих команд одинаковый, из них возвращается результат CanExecute основных команд)
То есть, как я понял вас, эти промежуточные команды должны заимствовать состояние основных команд. Но, допустим, сверху есть кнопка добавления, если её состояние определять таким же образом, то она всегда будет отключена. Причина в том, что у контекстного меню есть контекст данных - определенный товар, он передается в CanExecute, хотя он в этом методе не используется, но его туда передать нужно, так как ваша реализация команды для CanExecute выглядит так
C#
1
2
canExecute is null ? throw Exceptions.canExecuteException
                  : p => p is T t && canExecute(t)
Но у отдельной кнопки добавления нет контекста в виде товара. Соответственно при вызове CanExecute с параметром null всегда будет false. В этом и проблема. Для этого случая видимо надо где-то держать товар "по умолчанию".

Лично мне эта реализация не нравится. Как по мне, здесь вышло больше кода. Также тут при входе за гостя контекстное меню продолжает появляться в виде маленького прямоугольника, в котором все пункты скрыты
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
18.03.2023, 23:39
INexteR, да....
Скинул реализацию сквозной проверки доступа к методам.
Но вот удаление пустого ContextMenu оказалось не тривиальной задачей.
Моя идея была в скрытии меню по оценке количества пунктов в нём.
Но вот оказалось, что скрывать его надо ещё до того как пункты оценят свою видимость....
Какие только "танцы вокруг костра" не плясал - красивого варианта реализации создать не удалось.
Или дублирование, или создание на Шарпе.

Добавлено через 42 секунды
Цитата Сообщение от INexteR Посмотреть сообщение
возможно, что ранее Вы имели в виду такую реализацию:
XML
Да.

Добавлено через 1 минуту
Цитата Сообщение от INexteR Посмотреть сообщение
Но у отдельной кнопки добавления нет контекста в виде товара.
Можно либо добавить новый при проверке на Шарпе (в моей реализации), либо в саму кнопку в параметр передавать пустой экземпляр.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
18.03.2023, 23:55  [ТС]
Элд Хасп, я думаю, что вашу функциональность команд можно разнообразить. Т. е. создать варианты, где параметры у Execute и CanExecute будут разного типа. Или Execute с каким-то параметром, а CanExecute вообще без него. И наоборот. Все это для большей гибкости. А то вот в возникшей ситуации пришлось что-то выдумывать
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
19.03.2023, 00:10
Цитата Сообщение от INexteR Посмотреть сообщение
я думаю, что вашу функциональность команд можно разнообразить.
Базовые классы делаются для типовых случаев, а у нас не типичный
Можно сделать, но использоваться будут они редко.
Даже с типизированным параметром команды далеко не все используют.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,173
Записей в блоге: 2
19.03.2023, 13:00
INexteR, отладил реализацию.
Но сразу пишу - она тоже мне самому не очень нравится.
Но сделать какую-то проверку пунктов меню до вызова самого меню мне не пришло в голову как.
Поэтому получается дублирование: пункты задаются в XAML, а их имена надо повторить и проверить в конвертере на Шарпе.
Если они не будут друг другу соответствовать, то возможны баги.
Можно переместить создание меню в Шарп (но один экземпляр на весь сеанс приложения), можно вместо конвертера использовать мультиконвертер в который передаётся меню и имена пунктов извлекаются из него.
Но не один из этих вариантов не скажу что нравится мне.
Наверное вариант с мультибиндингом всё же будет предпочтительней.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
19.03.2023, 16:08  [ТС]
Элд Хасп, ясно, спасибо за проделанные усилия

Добавлено через 45 минут
Элд Хасп, тогда... этот проект можно считать завершенным? По заданию не была сделана только captcha
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2023, 16:08

Создание базы данных с функциями ввода, вывода, редактирования, удаления или добавления данных
Задание заключается в создании базы данных с функциями ввода, вывода, редактирования, удаления или добавления данных. Написал программу и...

Формы редактирования, добавления данных
Добрый вечер, такой вопрос, мне нужно сделать для кнопок Редактировать и Добавить записи форму, но я немного не понимаю как это...

Форма для добавления, редактирования, удаления данных
Уважаемые форумчане, подскажите, как лучше сделать и правильнее! В форме &quot;Органы исполнительной власти&quot; в данной &quot;БД&quot;...

Пример добавления, удаления и редактирования данных в БД *.mbd
нужен пример добавления, удаления и редактирования данных в БД *.mbd через классы OleDbDataAdapter, OleDbConnection, DataSet. ...

Использование возможностей добавления, редактирования и удаления необходимых записей в базы данных
помогите дополнить код пожалуйста public partial class Form1 : Form { // здесь отмечаются переменные и методы внутри класса формы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
140
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru