Есть ли способ получить данные из элемента управления DataGridView в приложении wpf? - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть элемент управления формы Windows, который мне нужно использовать в приложении wpf.Элемент управления в DataGridView, но когда я пытаюсь получить доступ к данным, вставленным пользователем в элемент управления, я всегда получаю нулевые значения.

Я уже создал элемент управления с использованием элемента управления WindowsFormHost в xaml и инициализирую столбцывнутри окна основного класса.Я попытался использовать код, который уже использовал в приложении Windows Form для получения данных.

Это инициализация элемента управления

<WindowsFormsHost>
    <wf:DataGridView x:Name="data"></wf:DataGridView>
</WindowsFormsHost>

Далее я инициализирую столбцы с этим кодом:

data.AllowUserToAddRows = true;
data.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;

DataGridViewTextBoxColumn c1 = new DataGridViewTextBoxColumn();
c1.HeaderText = "Name";
c1.Name = "description";
data.Columns.Add(c1);


DataGridViewTextBoxColumn c2 = new DataGridViewTextBoxColumn();
c2.HeaderText = "Quantity";
c2.Name = "quantity";
data.Columns.Add(c2);

Теперь сетка инициализирована правильно, и если я посмотрю в окно wpf, все в порядке и будет создано правильно.Я также могу вставлять данные и выполнять операции изменения размера над столбцами и строками.Теперь у меня есть кнопка, с помощью которой я должен получить данные, которые вставляет пользователь:

//because count also the header as row
if (data.Rows.Count > 1)
{
    int counter = 1;
    foreach (DataGridViewRow row in data.Rows)
    {
        int counter = 1;
        //do not count the header
        if(counter > 1)
        {
            string name = row.Cells[0].Value.ToString();
            string q = row.Cells[1].Value.ToString();
        }
        counter++;
    }
}

Но в этот момент возникает исключение нулевого указателя, поскольку содержимое row.Cells [0] .Value равно null (даже если данные присутствуют).Возвращенная ошибка: System.Windows.Forms.DataGridViewCell.Value.get вернула ноль.Обратите внимание, что счетчик строк работает нормально, потому что, если я вставлю новую строку, она будет иметь значение 2 (заголовок и новая строка).

Пожалуйста, дайте мне знать, если у вас есть обходной путь для преодоления этой проблемы.

1 Ответ

0 голосов
/ 11 апреля 2019

Как обращаться с DataGrid (WPF)

первый. Объявите тип, который будет представлять строки:

public class RowType
{
    public string Name { get; set; }
    public string Quantity { get; set; }
}

2ст. Инициализируйте DataGrid и добавьте столбцы и строки:

DataGridTextColumn c1 = new DataGridTextColumn();
c1.Header = "Name";
c1.Binding = new Binding("Name");
data.Columns.Add(c1);

DataGridTextColumn c2 = new DataGridTextColumn();
c2.Header = "Quantity";
c2.Binding = new Binding("Quantity");
data.Columns.Add(c2);

data.Items.Add(new RowType() { Name = "a", Quantity = "one" });
data.Items.Add(new RowType() { Name = "b", Quantity = "two" });

третий. Читать строки:

RowType tmp = data.Items[0] as RowType;

MessageBox.Show(tmp.Name + " " + tmp.Quantity);

Доступ к значениям из DataGridView (WinForms)

Значение может быть null. Вы не можете выполнить ToString() на null.

Добавить "?" чтобы исправить это:

string name = row.Cells[0].Value?.ToString();
string q = row.Cells[1].Value?.ToString();

Меньший пример для ? -оператора :

string tmp = null;

string x1 = tmp?.ToString(); // Works! x1 == null
string x2 = tmp.ToString(); // throws exception
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...