gpt4 book ai didi

c# - 使用过滤器将 DataGridView 导出到 Excel c#

转载 作者:太空宇宙 更新时间:2023-11-03 12:21:11 24 4
gpt4 key购买 nike

我有一些代码可以成功地将 DataGridView 从我的程序导出到 excel 电子表格。但是,当过滤器应用于 grid 时,它仅导出 header 而不导出数据。

实际写入数据的代码如下:

// storing header part in Excel  
for (int i = 1; i < dataGridView_assets.Columns.Count + 1; i++)
{
worksheet.Cells[1, i] = dataGridView_assets.Columns[i - 1].HeaderText;
}

// storing Each row and column value to excel sheet
for (int i = 0; i < dataGridView_assets.Rows.Count - 1; i++)
{
for (int j = 0; j < dataGridView_assets.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 1] = dataGridView_assets.Rows[i].Cells[j].Value.ToString();
}
}

我用来向我的数据添加过滤器的代码如下:

DataView typeFilter = new DataView(allAssetsDT, filter, "[Barcode] ASC", DataViewRowState.CurrentRows);
dataGridView_assets.DataSource = typeFilter;

有没有办法只导出应用过滤器时仍在查看的数据?

编辑:使用给出的答案,我现在遇到以下代码行的问题:

worksheet.Cells[1, i] = dtFiltered.Columns[i - 1].HeaderText;

上面的问题是.HeaderText。

worksheet.Cells[i + 2, j + 1] = dtFiltered.Rows[i].Cells[j].Value.ToString();

上述问题与 .Cells 调用有关。我猜我现在需要使用稍微不同的方法,因为改变了完成方式?

最佳答案

您必须使用 DataView。

使typeFilter成为范围内的私有(private)成员变量。

然后,当您导出到 excel 时,不要使用 dataGridView_assets,而是像这样从 DataView 使用经过过滤的 DataTable:

DataTable dtFiltered = typeFilter.ToTable();

提示:您不应该逐个单元格地导出,那会很慢。而是一次导出所有单元格,例如:Excel Interop - Efficiency and performance

您可以使用带有此问题的 DataGridView 来做到这一点(一次所有单元格),如果您需要格式化,您可以使用答案:Export the dataGridView to Excel with all the cells format

要将现有代码用于 DataTable:

// storing header part in Excel 
int i=0;
foreach (DataColumn dc in dtFiltered.Columns)
{
i++;
worksheet.Cells[1, i] = dc.ColumnName);
}

int j=1;
foreach (DataRow dr in dtFiltered.Rows)
{
j++;
for (i = 0; i < dtFiltered.Columns.Count; i++)
{
worksheet.Cells[j, i + 1] = dr[i].ToString());
}
}

关于c# - 使用过滤器将 DataGridView 导出到 Excel c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47135221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com