如何在C# WinForms中导出指定行数的DataSet数据?
实现指定行数数据导出的解决方案
问题说明
当前代码会导出ParsedReadings表的全部数据,需要修改为可自定义导出行数(如100行、500行)。以下提供两种可行方案:
方案一:基于已加载数据截取指定行数
适合数据量较小的场景,直接从已加载的DataTable中截取前N行:
private void button1_Click_1(object sender, EventArgs e) { // 可改为从界面输入框读取,比如TextBox.Text int exportRowCount = 500; using (SaveFileDialog SFD = new SaveFileDialog() { Filter = "Excel Workbook |*.xlsx" }) { if (SFD.ShowDialog() == DialogResult.OK) { try { DataTable originalTable = this._GPS_TrackerDataSet.ParsedReadings.CopyToDataTable(); // 截取前N行,若总行数不足则导出全部 DataTable filteredTable = originalTable.AsEnumerable() .Take(exportRowCount) .CopyToDataTable(); XLWorkbook XLW = new XLWorkbook(); XLW.Worksheets.Add(filteredTable, "ParsedReadings"); XLW.SaveAs(SFD.FileName); MessageBox.Show($"成功导出{filteredTable.Rows.Count}行数据。", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }
方案二:修改TableAdapter查询,仅加载指定行数
适合大数据量场景,避免全量加载占用内存,直接从数据库获取指定行数的数据:
操作步骤
- 打开你的
GPS_TrackerDataSet设计器,找到ParsedReadingsTableAdapter - 添加新查询(命名为
FillTopN),根据数据库类型编写SQL:- SQL Server:
SELECT TOP (@RowCount) * FROM ParsedReadings - MySQL:
SELECT * FROM ParsedReadings LIMIT @RowCount - Oracle:
SELECT * FROM ParsedReadings WHERE ROWNUM <= @RowCount
- SQL Server:
- 确保查询接受
@RowCount参数,并返回ParsedReadings结构的数据
修改导出代码
private void button1_Click_1(object sender, EventArgs e) { int exportRowCount = 500; using (SaveFileDialog SFD = new SaveFileDialog() { Filter = "Excel Workbook |*.xlsx" }) { if (SFD.ShowDialog() == DialogResult.OK) { try { DataTable filteredTable = new DataTable(); // 调用自定义的TableAdapter方法加载指定行数 this.parsedReadingsTableAdapter.FillTopN(filteredTable, exportRowCount); XLWorkbook XLW = new XLWorkbook(); XLW.Worksheets.Add(filteredTable, "ParsedReadings"); XLW.SaveAs(SFD.FileName); MessageBox.Show($"成功导出{filteredTable.Rows.Count}行数据。", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }
可选优化:让用户自定义输入行数
添加一个TextBox控件(命名为txtRowCount),让用户输入要导出的行数,代码中增加校验:
int exportRowCount; if (!int.TryParse(txtRowCount.Text, out exportRowCount) || exportRowCount <= 0) { MessageBox.Show("请输入有效的正整数行数。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; }
内容的提问来源于stack exchange,提问作者crlrcsnch
相关产品推荐
相关产品推荐

