我有一个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