【问题标题】:Return All Rows/Column Data from Data Set从数据集中返回所有行/列数据
【发布时间】:2014-09-07 06:56:53
【问题描述】:

我正在设计一个 ASP.NET MVC 4 解决方案,它允许用户导入 Excel 文件,在页面上对其进行特定修改,并以相同格式导出文件。我正在尝试创建一个名为 Grid 的视图,它将显示包含 Excel 电子表格中所有数据的大型数据集的内容。

    public ActionResult Grid()
    {
        DataSet ds = TempData["DataSet"] as DataSet;
        string exampleCell = ds.Tables[0].Rows[3][2].ToString();
        return View();
    }

exampleCell 是我如何从表格中提取单个单元格的示例。我想我可以遍历数据集中的所有列和行,并使用这种方法提取所有数据。那么,如何在单个视图上显示所有 exampleCell?

【问题讨论】:

  • 这是一个令人困惑的问题。数据来源于 Excel 是一个干扰因素。也许它起源于 FoxPro 或穿孔卡片。关键是您已经有一个 DataSet 并且需要在 MVC 中显示一个数据表。这是一个(不幸关闭)问题,其中提到了在 MVC 的 HTML 表中显示数据的多种方法:stackoverflow.com/questions/177275/…
  • 我删除了一些关于它是从 Excel 电子表格派生的 DataSet 的提及 - 尽管我仍然不确定我是否使用了正确的方法,关于 DataSet 是显示 Excel 电子表格中的数据。不过,我不知道如何在视图上呈现 exampleCell 的内容,也不知道如何在视图上显示 n x m exampleCells。这些库中的任何一个都使用 DataSet 执行此操作吗?

标签: c# asp.net-mvc dataset


【解决方案1】:

为您正在迭代的内容创建一个模型会好得多。这将允许 MVC 在您的用户单击客户端上的保存时生成模型。

因此,您将拥有一个封装每一行中的值的类。拥有另一个模型,其中包含您创建的第一个模型的 IEnumerable/IList。

在您的 Controller 方法中,将 DataSet 转换为这些模型,然后将模型与集合一起传递给您的 View。通过遍历枚举来填充您的 HTML 网格/表格。

如果您想一次性保存用户的所有更改,请将您的表格/表格包装在一个表单中,并使用相同的模型(带有 IEnumerable)作为 POST 方法的参数。当它再次调用服务器时,它将为您填充整个模型。

尝试找出更改的内容可能有点笨拙(除非您只想再次进行一次大规模数据转储),因此如果您想保存每个操作,这同样容易做到单个客户端 AJAX 调用。

【讨论】:

  • 同意。这似乎更像是一种快速完成它的行为,而不是一种正确完成它以直接绑定到数据集的行为。如果您想要这样的“快速完成”绑定,Web-forms 可能是要走的路,而不是 MVC。我想知道默认的模型绑定器是否甚至可以处理数据集?
  • 如果您想使用这样的数据集,请同意网络表单。解决这个问题的整个尝试的一部分也取决于如何从 Excel 中获取数据(这是从 OP 的问题中抽象出来的)。如果您在 Web 上,则不应使用本机 Excel COM,因为它们不是为服务器使用而设计的。像 EPPlus 这样的解决方案会是一个更好的解决方案,而且尝试将信息放入 DataSet 比将其作为模型对象工作需要更多的工作。
  • 当然,完全有可能代码已经设置为从数据源提供一个 DataSet,所以关于进入 List 的容易性和避免 Excel COM 的整个讨论可能没有实际意义。
  • @krillgar 谢谢你的详细回答;很明显,我对此有点陌生。我想我遵循一切——我避免使用模型,因为电子表格有 100 多列,但我相信在这种情况下,我可以使用字符串数组来表示每一行的内容。
  • MVC 中有一个“M”是有原因的。 ;) 字符串数组可以工作,但在视图中使用对象会容易得多。
猜你喜欢
  • 2021-09-04
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
相关资源
最近更新 更多