2016-05-15 5 views
0

私は単純なアプリケーションを持っており、Excelのデータをデータグリッドにインポートします。ここにコード:データグリッドwpfを更新しています。 ItemsSourceとItems.Refresh()が動作しない

private void InitializeDataGridView() 
    { 
     //Open the Excel file using ClosedXML. 
     using (XLWorkbook workBook = new XLWorkbook(ExcelFile.ExcelFilePath)) 
     { 
      //Read the first Sheet from Excel file. 
      IXLWorksheet workSheet = workBook.Worksheet(1); 

      //Create a new DataTable. 
      DataTable dt = new DataTable(); 

      //Loop through the Worksheet rows. 
      bool firstRow = true; 
      foreach (IXLRow row in workSheet.Rows()) 
      { 
       //Use the first row to add columns to DataTable. 
       if (firstRow) 
       { 
        foreach (IXLCell cell in row.Cells()) 
        { 
         dt.Columns.Add(cell.Value.ToString()); 
        } 
        firstRow = false; 
       } 
       else 
       { 
        //Add rows to DataTable. 
        dt.Rows.Add(); 
        int i = 0; 
        foreach (IXLCell cell in row.Cells()) 
        { 
         dt.Rows[dt.Rows.Count - 1][i] = cell.Value.ToString(); 
         i++; 
        } 
       } 

       dtGrid.ItemsSource = dt.DefaultView; 
      } 
     } 
    } 

うまくいきます。しかし、私はいくつかのデータを追加したい。このコードを使用して:

public static void AddData(DateTime date, int time, string title, string description) 
    { 
     // Opening excel file   
     using (XLWorkbook workBook = new XLWorkbook(ExcelFile.ExcelFilePath)) 
     {    
      IXLWorksheet worksheet = workBook.Worksheet("Progress"); // Trying to get the Progress worksheet 
      // Getting table from DataTable 
      var dataTable = GetTable(date, time, title, description); 
      // Searching for last used row and first used column 
      var lastRowUsed = worksheet.LastRowUsed().RowNumber(); 
      var firstColumnUsed = worksheet.FirstColumnUsed().ColumnNumber(); 
      // Insterting data    
      worksheet.Cell(lastRowUsed + 1, firstColumnUsed).InsertData(dataTable.AsEnumerable()); 

      // Adjusting content to fit 
      worksheet.Columns().AdjustToContents(); 
      // Saving excel file 
      workBook.Save(); 
     } 

    } 

    public static DataTable GetTable(DateTime date, int time, string title, string description) 
    { 
     DataTable table = new DataTable(); 
     table.Columns.Add("Data", typeof(DateTime)); 
     table.Columns.Add("Czas(minuty)", typeof(int)); 
     table.Columns.Add("Tytuł", typeof(string)); 
     table.Columns.Add("Opis", typeof(string)); 

     table.Rows.Add(date, time, title, description); 
     return table; 
    } 

そしてそれはうまく動作します。データグリッドに問題があります。 Excelファイルに何かを追加した後に更新されません。それは作業波平

dtGrid.ItemsSource = null; 
InitializeDataGridView(); 

は、私はそのような何かをしようとしました。私も dtGrid.Items.Refresh();を使用して、それは働いていなかった。 エクセルファイルにデータを追加した後、データグリッドを更新するにはどうすればよいですか?

+0

あなたの編集の後、あなたのExcelプロセスが間違いなく閉鎖されている、つまりタスクマネージャで実行中のExcelプロセスが見えないことを確認しましたか?ファイルが開いている場合は、グリッドを再初期化すると動作しない可能性があります。 –

+0

はい、私のExcelファイルは間違いなく終了しています。 Initializeの直後にデータを追加した直後。 – Porqqq

+0

「進行状況」シートは「ワークシート(1)」と同じですか? – Crowcoder

答えて

0

InitializeDataGridView()には、dataTable dt.DefaultViewを参照するdataGrid.ItemsSourceがあります。

新しいデータの追加に同じデータテーブルが使用されていません。新しいdataTableを作成してデータを追加する場合は、ItemsSourceの新しい参照として再接続する必要があります。

データグリッドを表示しているセッション全体で同じItemsSourceを使用することをお勧めします。

関連する問題