Почему мои добавленные строки данных исчезают из таблицы, как только цикл foreach закрывается? - PullRequest
0 голосов
/ 09 мая 2018

Я динамически добавляю строки и столбцы в таблицу данных. Строки добавляются, насколько я вижу, но как только я запускаю код, ничего не появляется. Как будто он обновляет таблицу после завершения цикла foreach? Новичок вопрос. Сожалею.

        summaryTable.Columns.Add("StationName", typeof(string));
        summaryTable.Columns.Add("DepartmentCode", typeof(string));
        var row = summaryTable.NewRow();

        foreach (var item in issuesByClass)
        {
            row.SetField("StationName", item.StationName);
            row.SetField("DepartmentCode", item.DepartmentCode);

            foreach (var itemClass in item.Lookup)
            {
                if (!itemClassLookup.ContainsKey(itemClass.Key)) continue;

                var itemClassValue = itemClassLookup[itemClass.Key];
                // Ensure column hasn't been added before
                if (!summaryTable.Columns.Contains(itemClassValue))
                {
                    summaryTable.Columns.Add(itemClassValue, typeof(decimal));
                }
                row.SetField(itemClassValue, itemClass.Sum());
            }

            if (!summaryTable.Columns.Contains("GrandTotal"))
            {
                summaryTable.Columns.Add("GrandTotal", typeof(decimal));
            }
            row.SetField("GrandTotal", item.GrandTotal);
        }
        return summaryTable;

Пример приложения для маленьких окон:

public Form1()
    {
        this.InitializeComponent();
        this.Test();
    }

    public void Test()
    {
        var dt = new DataTable();
        var subs = new[] { "Sub 1", "Sub 2", "Sub 3" };
        var row = dt.NewRow();
        foreach (var sub in subs)
        {
            if (!dt.Columns.Contains("Subs"))
            {
                dt.Columns.Add("Subs");
            }
            row.SetField("Subs", sub);
        }

        dt.Columns.Add("Test");
        row.SetField("Test", 1M);

        this.dataGridView1.DataSource = dt;
    }

1 Ответ

0 голосов
/ 09 мая 2018

NewRow() не добавляет строку . Вы должны сделать это вручную внизу цикла через .Rows.Add(row). Вам также, вероятно, следует создать NewRow() за итерацию.

    foreach (var item in issuesByClass)
    {
        var row = summaryTable.NewRow();

        // ...

        summaryTable.Rows.Add(row);
    }
...