Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
2 / 2 / 3
Регистрация: 19.04.2018
Сообщений: 100

Фокус на ячейке DataGrid

26.04.2019, 21:43. Показов 5553. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. После выполнения действия надо начать редактирование ячейки datagrid'a.
C#
1
2
3
4
Owner.Activate();
mainWindow.membersDataGrid.CurrentCell = new DataGridCellInfo(mainWindow.membersDataGrid.Items[0], 
mainWindow.membersDataGrid.Columns[3]);
mainWindow.membersDataGrid.BeginEdit();
Не работает. Фокус на окно переключается, а на ячейку - нет.
Может подскажите другой способ выделения ячейки.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.04.2019, 21:43
Ответы с готовыми решениями:

DataGrid: установить фокус на строку DataGrid, а не на сам DataGrid
Добрый день! Есть следующий код: public partial class MainWindow : Window { DataTable dt = new DataTable(); ...

Datagrid в ячейке Datagrid c корректным отображением границ
Задача поместить связанные данные (две таблицы Sql связаны по id ) в виде таблицы ячейки одной их колонок которой, содержат дочернюю...

MVVM фокус на datagrid
Всем привет. Никак не могу разобраться, как правильно делать фокус на datagrid. Задача банально, надо чтобы при загрузке окна, первая...

11
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
26.04.2019, 22:57
Проблема не в этом коде.
Вот аналог полностью рабочий
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            List<TwoPropertyClass> list = new List<TwoPropertyClass>()
            {
                new TwoPropertyClass("Первый", "First" ),
                new TwoPropertyClass("Второй", "Second"),
                new TwoPropertyClass("Третий", "Third"),
                new TwoPropertyClass("Четвёртый", "Fourth"),
                new TwoPropertyClass("Пятый", "Fifth")
            };
            membersDataGrid.ItemsSource = list;
 
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            membersDataGrid.CurrentCell = new DataGridCellInfo
                (
                    membersDataGrid.Items[3],
                    membersDataGrid.Columns[1]
                );
            membersDataGrid.BeginEdit();
        }
    }
Ищите проблему в другом месте.
0
2 / 2 / 3
Регистрация: 19.04.2018
Сообщений: 100
27.04.2019, 09:49  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вот аналог полностью рабочий
Не работает. Может из другого окна нельзя?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
27.04.2019, 12:23
Цитата Сообщение от XRou Посмотреть сообщение
Не работает. Может из другого окна нельзя?
Вполне возможно.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
27.04.2019, 12:45
Цитата Сообщение от XRou Посмотреть сообщение
Не работает. Может из другого окна нельзя?
Нет, причина в чём-то другом. Вот рабочий вариант из двух окон.

Дочернее окно
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<Window x:Class="WPF1903.OwnerWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF1903"
        mc:Ignorable="d"
        Title="OwnerWindow" Height="150" Width="200">
    <Grid>
        <Button VerticalAlignment="Center" HorizontalAlignment="Center"
                Padding="10" Margin="10"
                Click="Button_Click">
            <TextBlock Text="Выделить ячейку в основном окне"
                       TextAlignment="Center"
                       TextWrapping="Wrap"/>
        </Button>
    </Grid>
</Window>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    public partial class OwnerWindow : Window
    {
        MainWindow mainWindow;
        public OwnerWindow()
        {
            InitializeComponent();
        }
        public OwnerWindow(MainWindow mainWindow) : this()
            => this.mainWindow = mainWindow;
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (mainWindow != null)
            {
                mainWindow.Activate();
 
                mainWindow.membersDataGrid.CurrentCell = new DataGridCellInfo
                    (
                        mainWindow.membersDataGrid.Items[3],
                        mainWindow.membersDataGrid.Columns[1]
                    );
                mainWindow.membersDataGrid.BeginEdit();
            }
 
        }
    }
Основное окно
XML
1
2
3
4
5
6
7
8
9
10
11
12
<Window x:Class="WPF1903.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF1903"
        mc:Ignorable="d" Focusable="True"
        Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
    <Grid>
        <DataGrid x:Name="membersDataGrid"/>
    </Grid>
</Window>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    public partial class MainWindow : Window
    {
        OwnerWindow ownerWindow;
        public MainWindow()
        {
            InitializeComponent();
            List<TwoPropertyClass> list = new List<TwoPropertyClass>()
            {
                new TwoPropertyClass("Первый", "First" ),
                new TwoPropertyClass("Второй", "Second"),
                new TwoPropertyClass("Третий", "Third"),
                new TwoPropertyClass("Четвёртый", "Fourth"),
                new TwoPropertyClass("Пятый", "Fifth")
            };
            membersDataGrid.ItemsSource = list;
 
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            (ownerWindow = new OwnerWindow(this)).Show();
            //membersDataGrid.CurrentCell = new DataGridCellInfo
            //    (
            //        membersDataGrid.Items[3],
            //        membersDataGrid.Columns[1]
            //    );
            //membersDataGrid.BeginEdit();
        }
    }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
27.04.2019, 12:49
И причина не в Owner. Вот так тоже работает
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    public partial class OwnerWindow : Window
    {
        MainWindow mainWindow;
        public OwnerWindow()
        {
            InitializeComponent();
        }
        public OwnerWindow(MainWindow mainWindow) : this()
        {
            this.mainWindow = mainWindow;
            Owner = mainWindow;
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (mainWindow != null)
            {
                Owner.Activate();
 
                mainWindow.membersDataGrid.CurrentCell = new DataGridCellInfo
                    (
                        mainWindow.membersDataGrid.Items[3],
                        mainWindow.membersDataGrid.Columns[1]
                    );
                mainWindow.membersDataGrid.BeginEdit();
            }
 
        }
    }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
27.04.2019, 12:54
Забыл скинуть класс для списка. Простой класс с двумя свойствами и двумя конструкторами
C#
1
2
3
4
5
6
7
8
9
10
11
  public  class TwoPropertyClass
    {
        public string First { get; set; }
        public string Second { get; set; }
        public TwoPropertyClass() { }
        public TwoPropertyClass(string first, string second)
        {
            First = first;
            Second = second;
        }
    }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
27.04.2019, 12:55
Цитата Сообщение от XRou Посмотреть сообщение
Не работает. Фокус на окно переключается, а на ячейку - нет.
Вы проверьте - у Вас, вообще, DataGrid в режим редактирования входит? Если в ручную выделять?
0
2 / 2 / 3
Регистрация: 19.04.2018
Сообщений: 100
28.04.2019, 09:28  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы проверьте - у Вас, вообще, DataGrid в режим редактирования входит? Если в ручную выделять?
Да.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
28.04.2019, 13:02
Цитата Сообщение от XRou Посмотреть сообщение
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы проверьте - у Вас, вообще, DataGrid в режим редактирования входит? Если в ручную выделять?
Да.
Надо искать ошибку во взаимосвязях различных частей приложения.
Ошибка не связанна с самим кодом для входа в редактирование ячейка.

Добавлено через 4 минуты
При всех моих попытках смоделировать Вашу ситуацию, у меня всегда входит в редактирование без проблем.
Что у Вас не так - не знаю.

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

Добавлено через 1 минуту
И ещё идея такая появилась. У Вас случаем не может быть путаницы между Owner и mainWindow?
Попробуйте так
C#
1
2
3
4
5
6
7
8
9
// Owner.Activate();
mainWindow.Activate();
mainWindow.membersDataGrid.CurrentCell 
           = new DataGridCellInfo
               (
                        mainWindow.membersDataGrid.Items[0], 
                        mainWindow.membersDataGrid.Columns[3]
               );
mainWindow.membersDataGrid.BeginEdit();
0
2 / 2 / 3
Регистрация: 19.04.2018
Сообщений: 100
28.04.2019, 17:34  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
У Вас случаем не может быть путаницы между Owner и mainWindow?
mainWindow - это овнер с типом mainWindow. Т.е одинаковые окна.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
28.04.2019, 17:53
Лучший ответ Сообщение было отмечено XRou как решение

Решение

Цитата Сообщение от XRou Посмотреть сообщение
mainWindow - это овнер с типом mainWindow. Т.е одинаковые окна.
Я понял, что такова идея. Но интересуюсь на счёт верности реализации. Поэтому для проверки сделайте активацию не через Owner.Activate();, а через mainWindow.Activate();.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2019, 17:53
Помогаю со студенческими работами здесь

DataGrid. Убрать фокус со строки
DataGrid состоит например из 2 строк. Не получается сделать, чтобы при нажатие не на строку(то есть, на заголовок столбца или например на...

Фокус на строках после обновления datagrid
Добрый день форумчане! В DataGrid есть столбец &quot;NOTIFICATION&quot; в нем есть значения. Есть коллекция, для хранения значений ячеек выделенных...

После обновления данные DataGrid теряет фокус
Добрый день Имеется DataGrid, который отображает некоторые данные из ObservableCollection. Приложение сетевое и сервер время от...

WPF, DataGrid и многострочие в ячейке
Как ясно из вопроса: есть DataGrid и текст в ячейках. Как сделать перенос текста внутри его? Везде натыкаюсь на: DefaultCellStyle.WrapMode,...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru