Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 15
WPF

Программная имитация

19.11.2019, 04:54. Показов 2505. Ответов 29

Студворк — интернет-сервис помощи студентам
Добрый день, не могу справиться с проблемой:

Есть tabcontrol и item (tabitem1, tabitem2)
На первом при старте заполняется datagrid (grid) 1 столбец заполняется датами, при переходе на tabitem2 заполняется другой datagrid (grid_day), данные с базы, поэтому есть кнопка обновить таблицу (button_day)
Если тыкать руками то все работает исправно.
Я добавил обработчик события двойного щелчка по ячейке с датой первого datagrid (grid)
и прописал
C#
1
2
3
e.Handled = true; 
tabitem2.IsSelected = true; 
button_day.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
визуально все отрабатывает, но стоит сделать первый щелчок по таблице (по ячейкам или сортировке) это нажатие "сбрасывается". и вид таблицы остается неизменным, второе нажатие и все работает в штатном режиме.
Если снова перейти по двойному щелчку с tabitem1, то история повторяется.

При этом если это первое нажатие сделать в свободное место любого элемента ги, то далее все работает в штатном режиме.

Проходил пошагово по телу программы как физически тыкал так и программно маршруты не отличаются

Что можете посоветовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.11.2019, 04:54
Ответы с готовыми решениями:

Программная загрузка изображения из ресурсов в Image WPF
Всем привет, знакомлюсь с C#, начал с WPF, пытаюсь программно загрузить картинку в Image, изображение является внедренным ресурсом, уже...

Имитация залипания кнопки
Хочу сделать эффект чек бокса но без самого чек бокса (шутники или "профи" с вариантами, - "юзай чек бокс", !проходим мимо!)....

Имитация виджета рабочего стола
Добрый день! Собственно задача - написать приложение (WPF), которое по своему поведению имитировало бы виджет win7 (то есть при...

29
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
19.11.2019, 07:53
vovgordeev, а зачем вам такие "танцы с бубном"?
Что вы хотите реализовать?
0
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 15
19.11.2019, 08:13  [ТС]
Попросили (читай заказчик) реализовать переход в tabitem2 по двойному щелчку по дате в первом столбце grid
и этот переход сопровождается таким багом, он не критичный, но перфекционизм не дремлет
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
19.11.2019, 10:05
vovgordeev, именно по ячейке дата в строке?
Если э да, то эту ячейку надо заполнить Button с контекстом привязанным к дате.
И добавить команду или обработчик к кнопке.

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

Добавлено через 14 минут
vovgordeev, упс....
Не обратил внимание на двойной клик.
Надо немного больше инфы о вашей реализации.

У вас MVVM решение?
Как вы заполняете источник DataGrid?
И покажите разметку DataGrid.
Лучше даже полность XAML.
0
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 15
19.11.2019, 10:53  [ТС]
Элд Хасп,

-Как вы заполняете источник DataGrid? Через DataSet и SqlDataAdapter
-И покажите разметку DataGrid.
-Лучше даже полность XAML.


Не знаю чем она поможет, Через класс датагридхелпер к ячейкам таблицы датагрда привязываются множество свойств, так же при форматировании таблицы к нужным ячейкам привязывается событие даблклик в моем случае. в описании этого события как раз и прописаны три строчки
C#
1
2
3
e.Handled = true; 
tabitem2.IsSelected = true; 
button_day.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
на ячейки грида событие отрабатывает на отлично к нему претензий нет.

ЛС откроется я так понимаю после 3 сообщения, смогу вам отправить видео фрагмент, для наглядности

XML
1
2
3
4
5
6
7
8
9
10
<DataGrid ScrollViewer.CanContentScroll = "False" x:Name="grid1" Margin="8,38,10,10" SelectionChanged="grid_SelectionChanged" AlternationCount="0" IsReadOnly="True" SelectedIndex="0" SelectionMode="Extended" SelectionUnit="FullRow" CanUserAddRows="False" AutoGenerateColumns="True" HeadersVisibility="None" Loaded="grid1_Loaded">
                        <DataGrid.CommandBindings>
                            <CommandBinding Command="Copy" Executed="OnCopyingDataGrid" />
                            <CommandBinding Command="SelectAll" Executed="ctrlA_DataGrid" />
                        </DataGrid.CommandBindings>
                        <DataGrid.InputBindings>
                            <KeyBinding Key="C" Modifiers="Control" Command="Copy" />
                            <KeyBinding Key="A" Modifiers="Control" Command="SelectAll" />
                        </DataGrid.InputBindings>
                    </DataGrid>
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
19.11.2019, 12:23
vovgordeev, чё-то у меня нехорошие предчувствия...

XAML у вас почти пустой. Нет коллекции DataGrid, не заданы колонки, шаблоны....
Вы случаем в CB окна не заполняете DataGrid каждую ячейку отдельно?
0
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 15
19.11.2019, 14:51  [ТС]
Элд Хасп, предчувствий не надо) заполняю я datagrid через DataSet и SqlDataAdapter
0
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
19.11.2019, 14:58
vovgordeev, если предчувствий не надо, то зачем писали на борд? Делайте как делаете, заказчик оценит

Если же вы не хотите плодить говнокод, особено на заказ. То не поленитесь и прочтите про MVVM, выше ув. Элд Хасп дал решение, только не разжевал его.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
19.11.2019, 15:09
vovgordeev, то есть DataGrid.ItemsSource=Dataset ?
0
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 15
19.11.2019, 15:35  [ТС]
Элд Хасп, да, все верно
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
19.11.2019, 15:37
vovgordeev, а как вы определяете в какой колонке даты?
Количество колонок и их порядок в DataSet постояны?
0
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 15
19.11.2019, 16:10  [ТС]
Элд Хасп, количество колонок постоянно, DataSet передает тип данных из sql;
Вот для наглядности проблемы (13,17,27 с видно как после нажатия на ячейку происходит "Сброс")
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
19.11.2019, 19:18
vovgordeev, я попробую объяснить один раз.
Навязывать не хочу.
Захотите учиться - значит продолжим. Не захотите - ваше дело.

DataSet, DataTsble, SQL и т.п. - это все типы для Модели.
И Модель они покидать не должны.
Из Модели выходят уже структурированные данные, чей тип никак не связан со способом их хранения.
Наиболее часто используются DTO типы. И работа с Моделью происходит не напрямую, а через интерфейсы.

Если бы у вас была нормальная VM. В XAML были бы только привязки к ней и шаблоны для отображения.
Вашу задачу можно было бы решить очень просто.

В том же виде что у вас, надо работать с визуальными предоставлением элементов. Перехватывать события и на лету переопределять элементы, их свойства.
Это возможно. Но очень трудно. Так никто не делает.
И очень удивлюсь, если кто-то захочет разбираться с вашей проблемой.

Для нормального решения, вам надо целиком переделать всё приложение. Я не думаю что вы это будете делать.

Лучше оставьте всё как есть.
А в будущем обращайтесь за советом ещё на этапе проектирования архитектуры приложения.

Удачи!
1
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 15
20.11.2019, 08:14  [ТС]
Элд Хасп, учиться это всегда хорошо.
Заново, так заново. С чего начнем?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
20.11.2019, 08:58
vovgordeev, MVVM решение надо начинать с проектирования архитектуры, постановки ТЗ приложения и всех частей приложения.
Прочитайте пост Как создавалось приложение.
Сможете такие ТЗ сами сделать?

Если нет - опишите своими словами. Попробуем сделать совместно.
0
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 15
20.11.2019, 10:52  [ТС]
Элд Хасп, опишу функционал для начала
тз:
1. Окно состоит из табконтрола с 2 вкладками на первой: расположена таблица1 и календарь. На второй таблица2, текст, кнопка печать.
2. При открытии программы отображается\заполняется таблица1. Источник данных MS SQL.
2. Первый солбец содержит даты начиная с текущей +7 дней. Остальные содержат номера заявок.
3. Количество столбцов этой таблицы не определено (зависит от количества заявок в этот день). множество запросов к SQL по каждой дате.
4. Таблица1 имеет сортировку, таким образом чтоб одинаковые номера заявок находились друг под другом
4. Календарь с возможностью выбора одного диапозона дат, после выбора таблица перестраивается согласно выбранным датам. При выборе больше 21 дня задется вопрос о необходимости такого решения.
5. При выборе строки таблицы1, происходит заполнение таблицы2 согласно дате в первом столбце (один запрос к SQL)
6. Имя вкладки 2 заполнятся также согласно дате
7. При переходе на вкладку 2 отображется заполненная таблица2
8. При выборе строки таблицы 2 происходит заполнение текста, выбрать можно как диапозон так и множесто диапозонов, заполнение происходит согласно выбранным строкам, по даннм полученным из запроса
9. Текст должн быть отформатирован по шаблону
9. Кнопка печать отправляет содержимое текса на печать
10. Стилизация таблиц идет согласно контента
11. Каждая заполненная ячейка таблицы 1 имеет строку тултип
12. Двойной щелчок по любой заполненной ячейке таблицы 1 вызывает окно с информацией
13. Двойной щелчок по дате таблицы 1 вызывает заполнение таблицы 2 и переход на 2 вкладку
14. Таблица 2 должна иметь возможность сортировки по 2 столбцам одновременно

Пожалуй это весь функционал
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
20.11.2019, 12:12
vovgordeev, вы же писали, что количество колонок постоянно.
А теперь пишите, что определяется количеством заявок в это день.
Так как же на самом деле?
0
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 15
20.11.2019, 13:18  [ТС]
Элд Хасп, для первой таблицы не постоянно, для второй постоянно на ней у меня баг, про нее и говорил
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
20.11.2019, 13:31
vovgordeev, если количество колонок переменно, то DataTable придётся оставить.
Тогда такой вопрос.
В каком формате данные в колонке дат?
string или DateTime?
Есть ли ещё колонки с датами?
0
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 15
21.11.2019, 04:07  [ТС]
Элд Хасп,
в таблице2 есть 2 столбца с датой, в функцию
C#
1
AutoGeneratingColumn
я прописал:
C#
1
(grid_day.Columns[5] as DataGridTextColumn).Binding.StringFormat = "dd:MM:yyyy HH:mm";
В таблице 1 первый столбец с датой - формат string
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2019, 04:07
Помогаю со студенческими работами здесь

Программная авторизация на сайте.
Здравствуйте.Мне нужно программно залогиниться до одного сайта.Уже мучаюсь неделю,застрял на одном месте. Код программы ниже: public...

Программная авторизация на сайте
Существует сайт необходимо написать программу которая будет автоматически вводить логин и пароль заходить. После необходимо ввести в...

Программная аутентификация на сайте
Доброго времени суток. Не могу понять как пройти аутентификацию на сайте. Пример дать не могу, доступ только с моего компа открыт. В чем...

Программная генерация события
Добрый день! Возникла такая проблема. Использую пользовательскую компоненту, которая находится в сборке (Class Library), исходные коды...

Программная отправка комментария на сайт
Решил ради обучения прокомментить программно сей блог я так понимаю программа должна сначала выбрать в подписи комментария...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru