我有一個DataGrid,填充後我想將其導出爲Excel格式。到目前爲止,我能夠做到這一點。我嘗試對列順序進行排序時出現問題。頭是按照正確的順序構建的,但DataGridRows不是。WPF DataGridRow在列排序後不更新單元格順序
所述的圖像顯示了最終的結果:
在這個例子中我換用「TIPO Entidade」的「ID Equipa」列,然而,在Excel文件(在右側)的行值會繼續,好像沒有更改發生時頭很好地更新。
不知道這是否會有所幫助,但我的「ExportToExcel」類是基於對這個項目ExportToExcel Project但不是使用它的類標識符
public class ExportToExcel<T, U>
where T : class
where U : List<T>
{
// ...
}
我創造了這個一個
public class ExportToExcel
}
public ExportToExcel(List<DataGridColumn> columns, List<DataGridRow> dataToFill)
{
// ...
}
}
我認爲問題出在我的'dataToFill'參數中,因爲它保持默認的單元格順序,並且在列排序事件後不更新。
我不明白爲什麼會發生這種情況。如果有人能夠解決這個問題,我會非常感激。
感謝
編輯:
繼謝里登的意見,我張貼一些額外的代碼。
我這是怎麼提取的DataGrid行
public IEnumerable<DataGridRow> GetDataGridRows()
{
var itemsSource = dgEntities.ItemsSource as IEnumerable;
if (null == itemsSource) yield return null;
foreach (var item in itemsSource)
{
var row = dgEntities.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
if (null != row)
{
if (dgEntities.SelectedItems.Count == 0) yield return row;
else if (row.IsSelected) yield return row;
}
}
}
這裏就是我instaciate的ExportToExcel類
public void ExportToExcel()
{
if (dgEntities.ItemsSource != null)
{
try
{
BLL.ExportToExcel export = new ExportToExcel(dgEntities.Columns.ToList(), GetDataGridRows().ToList());
export.GenerateReport();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
}
這下一位是我從我所提到的CodeProject上項目的原代碼覆蓋早期的
private object[] CreateHeader()
{
// Create an array for the headers and add it to the
// worksheet starting at cell A1.
List<object> objHeaders = new List<object>();
foreach (DataGridColumn dgc in Columns)
{
if (dgc.Visibility == System.Windows.Visibility.Visible) objHeaders.Add(dgc.Header);
else deletedColumns.Add(dgc.DisplayIndex);
}
var headerToAdd = objHeaders.ToArray();
AddExcelRows("A1", 1, headerToAdd.Length, headerToAdd);
SetHeaderStyle();
return headerToAdd;
}
private void WriteData(object[] header)
{
object[,] objData = new object[DataToFill.Count, header.Length];
for (int j = 0; j < DataToFill.Count; j++)
{
DataGridRow row = DataToFill[j];
int i = 0;
for (int x = 0; x < Columns.Count; x++)
{
if (!deletedColumns.Contains(x))
{
DataGridCell cell = GetCell(row, j, x);
if (cell != null && cell.Content is TextBlock)
{
objData[j, i] = ((TextBlock)cell.Content).Text;
i++;
}
}
}
}
AddExcelRows("A2", DataToFill.Count, header.Length, objData);
AutoFitColumns("A1", DataToFill.Count + 1, header.Length);
}
我從我的類中刪除了該代碼,並從頭開始構建了CreateHeader方法,並且它工作正常......問題不在於標題,而是在沒有按照DataGrid標題排序的行中... – David
然後你的問題就在'WriteData'方法中......在那裏放置一個斷點,看看實際發生了什麼。 – Sheridan
大概是這樣,但是當我調試它時,這些值是默認的列順序......所以我傾向於認爲可能問題在於我在將它傳遞給ExportToExcel類之前如何提取列表 –
David