如何将列表中保存的 datagridview 复选框列值导出到 Excel 中

2024-03-10

我有一个class and a Form1. In my class我创建了变量来保存我的数据。

保存状态.cs

public static List<string> plate_list = new List<string>();
public static List<string> checkbox_list = new List<string>();

然后在我的Form1,我保存了数据textbox1 and chk进入变量通过button1。两个数据是相互独立的。然后我通过以下方式将它们导出到Excel中button2。下面是我的代码:

Form1.cs

private void button1_Click(object sender, EventArgs e)
{
 Savestate.plate_list.Add(textbox1.Text);
 foreach (DataGridViewRow dataGridRow in dataGridView1.Rows)
 {
   DataGridViewCheckBoxCell chk = dataGridRow.Cells[1] as DataGridViewCheckBoxCell;
   if (Convert.ToBoolean(Convert.ToInt32(chk.Value)) == true)
     {
      Savestate. checkbox_list.Add("P");
     }
   else if (Convert.ToBoolean(chk.Value) == false)
     {
      Savestate. checkbox_list.Add("O");
     }
  }
}

//snippet of codes for exporting variables into excel
private void button2_Click(object sender, EventArgs e)
{ 
  int _lastRow1 = oSheet1.Range["C" + oSheet1.Rows.Count].End[Excel.XlDirection.xlUp].Row + 1;
  rng = oSheet1.Range[oSheet1.Cells[_lastRow1, 2], oSheet1.Cells[_lastRow1, 10]];

   foreach (var data in Savestate.plate_list)
        {
          oSheet1.Cells[_lastRow1, 1] = data;
          foreach (var other in Savestate. checkbox_list)
          {
           rng.Value = other;
           (another loop here to read the checkbox list values?)
           }
            _lastRow1++;
        }
 }

使用这些代码,我可以正确循环遍历我的车牌号,但对于我的复选框值,仅导出最新值,请参阅here https://i.stack.imgur.com/DIQOx.png(我保存了 2 个车牌号,因此应该有 2 组复选框值,但仅导出 1 组复选框值)。我觉得我必须专门为复选框值创建另一个循环,但我不知道如何开始。希望能得到一些帮助。谢谢!


如果您执行以下操作,会容易得多:

  • 右键单击解决方案资源管理器中的项目

  • 选择添加新...

  • 将新的数据集添加到项目中

  • 双击DataSet,出现类似数据库设计器的东西

  • 右键单击设计图面,选择新建数据表,适当命名

  • 重复右键单击数据表,选择添加列并添加要保留数据的所有列。设置每列的类型,例如字符串、整数、布尔值等

  • 保存您的数据集

  • 切换回表单设计器,进入相关菜单以显示您的 Visual Studio 版本的“数据源”窗口。如果您不知道如何显示,请谷歌。以 2017 年为例:https://learn.microsoft.com/en-us/visualstudio/data-tools/add-new-data-sources?view=vs-2017#data-sources-window https://learn.microsoft.com/en-us/visualstudio/data-tools/add-new-data-sources?view=vs-2017#data-sources-window

  • 数据源窗口中有一个树,其中一个节点是您的数据表。将其拖到表单设计器上。将出现一个数据网格视图,其中包含适合数据类型的列。布尔列是一个复选框。 datagridview 连接到包含数据表实例的 DataSet 对象。您在网格中输入的任何内容都会存储在数据表中。如果您不需要,可以删除出现的绑定导航器

  • 右键单击解决方案资源管理器中的解决方案,选择管理解决方案的 Nuget 包

  • 在块包管理器中,单击“浏览”,然后在搜索框中键入 EPPLUS。将 epplus 库安装到您的项目中。关闭nuget包管理器

  • 双击表单上的保存按钮。添加 epplus 从数据表创建 Excel 文件所需的约 3 行代码。更多信息可以在这里找到:使用 EPPlus 将数据表导出为 Excel https://stackoverflow.com/questions/13669733/export-datatable-to-excel-with-epplus


在该链接中,您需要将 DataTable 的名称替换为 LoadFromDataTable 调用。它位于您的数据集中,因此类似于yourDataSetName.YourDataTabkeName


以上就是一个叫做MVC——模型、视图、控制器的概念的体现。其本质是,您的数据位于一个称为模型(本例中为数据集/数据表)的专用容器中,并且由视图(datagridview)显示在屏幕上,并再次由其他东西控制/更改(尽管在本例中)在许多示例中,datagridview 在某种程度上也是控制器)。在 VB6 中,将复杂控件(如 gridview)放在表单上并在其中存储数据的日子应该已经结束了:)。尽管有时将数据存储在例如计算机上仍然更方便。文本框并用textbox.Text将其挖掘出来 对于简单的场景,这些控件都支持数据绑定,并且如果您的程序是haoldibg多个数据记录并对其进行分页,则意味着所有数据都应该存储在模型中,所有显示它并编辑它的控件连接到模型,它们都理解模型中导航的概念 - 您更改模型中引用的当前记录,所有文本框等都会自动更改它们显示的数据。您不必进入每个控件并重复将数据推入其中,然后自己将其挖掘出来

一旦您理解了 MVC 范例,您就可以使用其他开发人员也已针对的功能(在本例中为 EPPlus),您只需将数据模型(DataSet/DataTable)交给它并说“在这里,将其写入文件”并它会做到的。你不能把你的datagridview交给epplus,因为根据MVC原则,数据不应该存储在datagridview中,所以epplus不支持从中挖掘数据

如果没有别的事,希望您能够体会到,上面的步骤集虽然在我输入时看起来很长,但实际上比您迄今为止编写的时间、鼠标点击次数和代码行数都少。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将列表中保存的 datagridview 复选框列值导出到 Excel 中 的相关文章

随机推荐