C# WPF Как добавить динамический c элемент строки в DataGrid, не привязывая его к какому-либо типу? - PullRequest
0 голосов
/ 01 апреля 2020

Я пишу программу, которая создает динамические c DataGrid на основе пользовательского ввода, пользователь предоставляет только имена столбцов, имена строк, исходя из того, что мне нужно создать пустой DataGrid, который позволяет пользователю вводить значение. Но так как я не могу найти Что-нибудь для моего случая, Мои столбцы будут содержать числа, и я не могу создать тип для их хранения. Решения, которые я нашел, работают, только если вы создаете тип и затем используете свойства этого типа, но я не могу предсказать, сколько свойств мне понадобится, поэтому мне нужно добавить массив в виде строки.

Что я хочу добиться чего-то вроде этого:

private void generate_DataGrid(string[] headers)
{
    foreach (string h in headers) {
        DataGridTextColumn gridColumn = new DataGridTextColumn();
        gridColumn.Header = h;
        tabelaDataGrid.Columns.Add(gridColumn);
    }

    int[] row1 = new int[3];
    int[] row2 = new int[3];
    tabelaDataGrid.Items.Add(row1);
    tabelaDataGrid.Items.Add(row2);
}

Приведенное выше решение сгенерирует пустую строку, но я не могу их редактировать:

"System.InvalidOperationException: '' EditItem ' недопустимо для этого представления. '"

Или, может быть, я должен искать какое-то другое решение, такое как библиотека электронных таблиц?

1 Ответ

0 голосов
/ 02 апреля 2020

Вы пытались привязать DataGrid к DataTable, а затем просто добавили строки и столбцы следующим образом: (Обратите внимание, BindableBase является частью Prism фреймворка; если вы не используете его, найдите INotifyPropertyChanged Интерфейс, чтобы увидеть, как реализовать его с нуля)

 public class DataGridExampleViewModel : BindableBase
{
    private DataTable _dataTable;
    public DataTable DataTable
    {
        get { return _dataTable; }
        set { SetProperty(ref _dataTable, value); }
    }

    public DataGridExampleViewModel()
    {

        //Create a empty dataTable
        DataTable = new DataTable();
    }

    //Add a column to the DataTable the Type is optional
    public void AddColumn(string columnName, Type dataType)
    {
        DataTable.Columns.Add(columnName, dataType);
    }

    //Add an empty row to the DataTable
    public void AddRow()
    {
        //Create a new row
        var row = DataTable.NewRow();

        //Add the row to the DataTable
        DataTable.Rows.Add(row);
    }      
}

Если вы новичок в WPF и не знакомы с привязкой данных, я настоятельно рекомендую вам поискать его.

Примечание: проверьте Prism & MahApps.Metro - отличные библиотеки для создания приложений WPF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...