Как заполнить сетку данных данными в uwp и сделать сетку редактируемой?

Необходимо заполнить Datagrid в UWP с помощью Datatable. Я мог бы отобразить содержимое следующим образом: https://stackoverflow.com/a/53767049/12053338

Однако я не могу редактировать datagrid.

Как сделать Datagrid редактируемым? (усталая установка IsReadOnly на false).

Спасибо

XAML

         <controls:DataGrid
                        x:Name = "grid" 
                        IsReadOnly = "False"
                        VerticalAlignment = "Stretch" 
                        HorizontalAlignment = "Stretch"
                        GridLinesVisibility = "All">

        </controls:DataGrid>

С#

            //Datatable
            var table = new DataTable("Students");
            table.Columns.Add(new DataColumn() { ColumnName = "Name", DataType = typeof(string)});
            table.Columns.Add(new DataColumn() { ColumnName = "Id", DataType = typeof(string)});

            //Add a row
            table.Rows.Add("Akinator","1");

          //Conversion of datatable to datagrid itemsource
          for (int i = 0; i < table.Columns.Count; i++)
            {
                grid.Columns.Add(new DataGridTextColumn()
                {
                    Header = table.Columns[i].ColumnName,
                    Binding = new Binding { Path = new PropertyPath("[" + i.ToString() + "]"), Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged }

                });
            }
            var collection = new ObservableCollection<object>();
            foreach (DataRow row in table.Rows)
            {
                if (row.ItemArray.Length > 0)
                    collection.Add(row.ItemArray);


            }
            grid.ItemsSource = collection;


*Использование таблицы данных не может быть заменено в этом конкретном случае.

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

Roy Li - MSFT 30.12.2022 04:12

Поскольку вы пытаетесь добавить столбец самостоятельно, установите для AutoGenerateColumns значение False. Я попробовал ваш код, проблема может быть связана с привязкой, которую вы добавили в DataGridTextColumn. Если не добавлять привязку, ячейка редактируется как обычно. При добавлении привязки данные будут отображаться, но ячейка больше не редактируется. Похоже, DataGridTextColumn не удалось сгенерировать элемент редактирования.

Roy Li - MSFT 30.12.2022 07:45

Я предлагаю вам преобразовать DataTable в список режимов, а затем использовать этот список в качестве источника. Как и второй способ в ссылке, которой вы поделились.

Roy Li - MSFT 30.12.2022 07:47

Таблица My Data будет генерироваться динамически, столбцы не будут каждый раз одинаковыми. Извините, если я что-то упустил, я новичок в uwp, пожалуйста, помогите мне.

Akinator 30.12.2022 08:17

Я попытался создать столбец вручную и установить привязку в коде позади. Но я изменил источник с DataTable на список моделей. Ячейка может быть отредактирована правильно. Похоже, проблема связана не только с самой привязкой, но и с Источником -DataTable. Вы можете поднять вопрос в Community ToolKit Github

Roy Li - MSFT 30.12.2022 10:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение этой проблемы, установите для IsReadonly значение false при создании столбцов.

 //Conversion of datatable to datagrid itemsource
      for (int i = 0; i < table.Columns.Count; i++)
        {
            grid.Columns.Add(new DataGridTextColumn()
            {
                Header = table.Columns[i].ColumnName,
                Binding = new Binding { Path = new PropertyPath("[" + i.ToString() + "]"), Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged },
                IsReadOnly = false //ADD THIS TO MAKE THE DATAGRID EDITABLE

            });
        }
        var collection = new ObservableCollection<object>();
        foreach (DataRow row in table.Rows)
        {
            if (row.ItemArray.Length > 0)
                collection.Add(row.ItemArray);


        }
        grid.ItemsSource = collection;

Другие вопросы по теме