DataTable как источник привязки DataGridView - заполнять ссылками, а не значениями - PullRequest
0 голосов
/ 06 января 2020

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

Я пробую подход «привязка данных с промежуточным источником данных» (номер три из первоначальных опций, которые я обрисовал в общих чертах). Для этого я создал DataTable в области пользовательского интерфейса, который содержит то же количество ячеек, что и DataGridView. Затем я заполняю его соответствующими данными и связываю с DGV. Этот DataTable содержит подмножество базовых данных, изложенных в соответствии с требованиями пользовательского интерфейса.

Однако DataTable не обновляется при изменении базовых данных. Я пытался убедиться, что таблица заполнена ссылками, а не значениями, указав, что тип данных - «объект». Однако, похоже, что это не работает, как я надеялся. Тестирование показывает, что содержимое DataTable остается неизменным после ввода. Предположительно они являются значениями.

Чтобы привести упрощенный пример, скажем, у меня есть DataGridView два на два, и я хочу заполнить его некоторой базовой статистикой c для собаки и дома, которая формирует часть гораздо большей объектной модели. То, что я делаю, выглядит примерно так:

class Dog{
    string Name;
    int Age;
    float WeightInKG;
}
class House{
    string NameOrNumber;
    int YearBuilt;
    bool IsPainted;
}

Инициализируйте объекты и создайте источник данных, связанный с DGV:

DataTable dgvContents;
House thisHouse = new House();
Dog thisDog = new Dog();
InitObjects();
CreateDataTable();

private void InitObjects() {
    thisHouse.YearBuilt = 1970;
    thisHouse.IsPainted = true;
    thisDog.Name = "Spot";
    thisDog.Age = 3;
}
private void CreateDataTable() {
    dgvContents = populateDataTable();
    BindingSource SBind = new BindingSource();
    SBind.DataSource = dgvContents;
    dataGridView1.DataSource = SBind;
}
private DataTable PopulateDataTable() {
    DataTable thisTable = new DataTable("UITable");
    int cols = 2;
    int rows = 2;
    for (int i = 0; i < cols; i++)
    {
        thisTable.Columns.Add("", typeof(object));
    }
    for (int j = 0; j < rows; j++)
    {
        thisTable.Rows.Add(new object[cols]);
    }
    thisTable.Rows[0][0] = thisdog.Name;
    thisTable.Rows[0][1] = thisdog.Age;
    thisTable.Rows[1][0] = thisHouse.IsPainted;
    thisTable.Rows[1][1] = thisHouse.YearBuilt;
    return thisTable;
}

Этот метод жизнеспособен, только если DataTable I Я создаю (dgvContents) содержит ссылки, а не значения. Это возможно?

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