C# Приложение WPF Загрузка новых данных в сетку данных без удаления предыдущих данных - PullRequest
0 голосов
/ 13 февраля 2020

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

В настоящее время мой код будет читать дискету и выводить нужные данные в сетку данных. Однако каждый раз, когда я вставляю новую дискету и нажимаю кнопку «Загрузить», она просто перезаписывает данные, уже находящиеся в таблице, данными с новой дискеты. Я хочу, чтобы он сохранил данные в таблице и добавил новую строку для отображения данных с новой дискеты.

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

Вот что я делаю:

Это часть .xaml, где я создал сетку данных:

<DataGrid Name="TableData" AutogenerateColumns="False">
        <DataGrid.Columns>
                <DataGridTextColumn Header = "Seq #" Binding="{Binding SeqNum}"></DataGridTextColumn>
                <DataGridTextColumn Header = "Disk Num" Binding="{Binding HdrDisk}"></DataGridTextColumn>
                <DataGridTextColumn Header = "Date/Time" Binding="{Binding HdrDTG}"></DataGridTextColumn>
                <DataGridTextColumn Header = "File Size" Binding="{Binding fileSize}"></DataGridTextColumn>
                <DataGridTextColumn Header = "# of Disks" Binding="{Binding TotalDisk}"></DataGridTextColumn>
        </DataGrid.Clumns>

Здесь я создаю класс для привязки данных:

public class TableDataClass
{
        public int HdrDisk {get;set;}
        public string HdrDTG {get;set;}
        public int TotalDisk {get;set;}
        public int SeqNum {get;set;}
        public in fileSize {get;set;}
}

И здесь я выполняю загрузку с дискеты, обрабатываю данные и выводлю в сетку данных.

private void loadFromFloppy(object sender, RoutedEventArgs e)
{

// A bunch of stuff that I do to process reading in the floppy
// ..
// ..
// ..

// disknum, asciistring, totDiskNum, seqNumCount, fileSizeTemp are all properly
// calculated and filled in this part.
// ..
// ..

//Output Data to Data Grid Table
List<TableDataClass> tableData = new List<TableDataClass>();

tableData.Add(new TableDataClass()
{
        HdrDisk =disknum,
        HDRDTG = asciiString,
        TotalDisk = totDiskNum,
        SeqNum = seqNumCount,
        fileSize = fileSizeTemp
});

TableData.ItemsSource = tableData;

}

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Это похоже на проблему, с которой я столкнулся несколько недель назад. Мое предложение было бы просто добавить еще одну строку в таблицу данных, например:

DataTable dt = myDataGridView.DataSource;
DataRow row = dt.NewRow(); //This sets "row" to a new, completely blank row with all the columns in "dt"
row["HdrDisk"] = disknum
(And all the other fields...)
dt.Rows.Add(row);
myDataGridView.DataSource = dt;

Это должно работать (в теории).

0 голосов
/ 13 февраля 2020

Хорошо, этот ответ исходит из предложения Абина. Я хотел предоставить его всем остальным, кто борется с этим.

Я перешел из списка в ObservableCollection.

Я добавил следующий код:

public partial class MainWindow : Window
{

        private ObservableCollection<TableDataClass> tableDataFill; //This line is new


        public MainWindow()
        {
            Initialize Component();
            tableDataFill = new ObservableCollection<TableDataClass>() {}; //This line is new
        }

Затем, там, где я пытался заполнить таблицу списком, я изменил его с приведенного выше на следующее:

tableDataFill.add(new TableDataClass ()
{
    HdrDisk =disknum,
    HDRDTG = asciiString,
    TotalDisk = totDiskNum,
    SeqNum = seqNumCount,
    fileSize = fileSizeTemp
}

TableData.ItemsSource = tableDataFill;

Потребовалось немало усилий для реструктуризации моего кода и удаления из списка, но это работает сейчас.

Еще раз спасибо Абину.

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