DataGrid генерирует пустые строки - PullRequest
0 голосов
/ 09 января 2019

Я заполняю DataTable некоторыми значениями (после определения имен столбцов), а затем использую его как источник данных для сетки Sage - функционально очень похожий на WinForms DataGridView.

До сих пор я пытался добавить тип данных в столбцы DataTable и заполнить BindingSource объектом DataTable, а затем связать его с сеткой Sage. При просмотре содержимого DataTable во время отладки вы можете увидеть, есть ли данные с помощью DataSet Visualiser.

DataSet Visualiser

Создание таблицы данных -

DataTable failedOrders = new DataTable();

failedOrders.Columns.Add("externalItemCodeColumn", typeof(String));
failedOrders.Columns.Add("reasonColumn", typeof(String));

foreach (String item in insufficientItemsAvailable)
{
    DataRow dataRow = failedOrders.NewRow();
    dataRow["externalItemCodeColumn"] = item;
    dataRow["reasonColumn"] = "Not enough available items in WAREHOUSE";

    failedOrders.Rows.Add(dataRow);
}

Заполнение сетки мудреца -

Sage.Common.Controls.GridColumn externalItemCodeColumn = new Sage.Common.Controls.GridColumn();
externalItemCodeColumn.Caption = "External Item Code";
externalItemCodeColumn.DisplayMember = "externalItemCodeColumn";

Sage.Common.Controls.GridColumn reasonColumn = new Sage.Common.Controls.GridColumn();
reasonColumn.Caption = "Reason";
reasonColumn.DisplayMember = "reasonColumn";

failedOrdersGrid.Columns.Add(externalItemCodeColumn);
failedOrdersGrid.Columns.Add(reasonColumn);

failedOrdersGrid.DataSource = FailedOrders;
//failedOrdersGrid.Refresh(); - this doesn't seem to make a difference

Обратите внимание, что failedOrders передается другому методу, поэтому имя меняется с failOrders на FailedOrders.

Просто чтобы проверить, что это поведение не относится к Sage Grid, я попытался заполнить обычный WinForms DGV таблицей DataTable. (Примечание. Я отключил AutoGenerateColumns, так как это, похоже, не вариант для Sage Grid).

dataGridView1.AutoGenerateColumns = false;
dataGridView1.Columns.Add("externalItemCodeColumn", "External Item Code");
dataGridView1.Columns.Add("reasonColumn", "Reason");
dataGridView1.DataSource = FailedOrders;

Я ожидаю, что содержимое Sage Grid будет соответствовать содержимому DataGrid, но вместо этого получу пустые строки.

Form

1 Ответ

0 голосов
/ 15 января 2019

Sage.Common.Controls.Grid наследуется от Sage.Common.Controls.List, а свойство DataSource Sage.Common.Controls.List требует при обновлении, чтобы новый DataSource поддерживал хотя бы IList (Он буквально обнуляет ваш источник данных, если это не IList)

Вот адаптация вашего кода для работы с Sage.Common.Controls.Grid

Я добавил это в конструктор моей формы (где failedOrdersGrid имеет тип Sage.Common.Controls.Grid):

        List<Failure> failedOrders = new List<Failure>();

        foreach (String item in new List<string> { "1", "2", "3" })
        {
            failedOrders.Add(new Failure { externalItemCodeColumn = item, reasonColumn = "Not enough available items in WAREHOUSE" });
        }

        Sage.Common.Controls.GridColumn externalItemCodeColumn = new Sage.Common.Controls.GridColumn();
        externalItemCodeColumn.Caption = "External Item Code";
        externalItemCodeColumn.DisplayMember = "externalItemCodeColumn";

        Sage.Common.Controls.GridColumn reasonColumn = new Sage.Common.Controls.GridColumn();
        reasonColumn.Caption = "Reason";
        reasonColumn.DisplayMember = "reasonColumn";

        failedOrdersGrid.Columns.Add(externalItemCodeColumn);
        failedOrdersGrid.Columns.Add(reasonColumn);

        failedOrdersGrid.DataSource = failedOrders;

А вот класс отказов:

public class Failure
{
    public string externalItemCodeColumn { get; set; }
    public string reasonColumn { get; set; }
}
...