Необходимо заполнить 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;
*Использование таблицы данных не может быть заменено в этом конкретном случае.
Поскольку вы пытаетесь добавить столбец самостоятельно, установите для AutoGenerateColumns
значение False. Я попробовал ваш код, проблема может быть связана с привязкой, которую вы добавили в DataGridTextColumn
. Если не добавлять привязку, ячейка редактируется как обычно. При добавлении привязки данные будут отображаться, но ячейка больше не редактируется. Похоже, DataGridTextColumn
не удалось сгенерировать элемент редактирования.
Я предлагаю вам преобразовать DataTable в список режимов, а затем использовать этот список в качестве источника. Как и второй способ в ссылке, которой вы поделились.
Таблица My Data будет генерироваться динамически, столбцы не будут каждый раз одинаковыми. Извините, если я что-то упустил, я новичок в uwp, пожалуйста, помогите мне.
Я попытался создать столбец вручную и установить привязку в коде позади. Но я изменил источник с DataTable
на список моделей. Ячейка может быть отредактирована правильно. Похоже, проблема связана не только с самой привязкой, но и с Источником -DataTable
. Вы можете поднять вопрос в Community ToolKit Github
Я нашел решение этой проблемы, установите для 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;
Все ячейки доступны для редактирования по умолчанию в DataGrid. Пожалуйста, поделитесь кодом, который вы используете, или минимальным воспроизводимым примером здесь.