System.Data.DataTable、DataRowCollection 和 DataColumns:索引如何工作?

发布于 2024-11-15 23:17:16 字数 980 浏览 2 评论 0原文

DataTable 中:

我可以像这样访问所有 DataRow 元素:

DataTable table = GetMyTable();
for (int i = 0; i < table.Rows.Count; i++) {
  DataRow row = table.Rows[i];
  Console.WriteLine(row);
}

访问所有 DataColumn 元素:

DataTable table = GetMyTable();
for (int i = 0; i < table.Columns.Count; i++) {
  DataColumn column = table.Columns[i];
  Console.WriteLine(column);
}

另外,我可以像这样 ,我可以像这样访问 DataTable 对象的每个单独的 Cell

DataTable table = GetMyTable();
for (int i = 0; i < table.Rows.Count; i++) {
  DataRow row = table.Rows[i];
  object[] array = row.ItemArray;
  for (int j = 0; j < array.Length; j++) {
    object cell = array[j];
    Console.WriteLine(cell);
  }
}

至少看起来第三种技术丢失了一些信息。

这是我的问题: 如何管理这个对象数组?

我一直在研究如何使用这种基本类型的功能重新创建某些东西(因为我已经熟悉它了),但我只是不知道如何设计所有这些小子类以使其发挥作用!

In a DataTable:

I can access all of the DataRow elements like so:

DataTable table = GetMyTable();
for (int i = 0; i < table.Rows.Count; i++) {
  DataRow row = table.Rows[i];
  Console.WriteLine(row);
}

Also, I can access all of the DataColumn elements like this:

DataTable table = GetMyTable();
for (int i = 0; i < table.Columns.Count; i++) {
  DataColumn column = table.Columns[i];
  Console.WriteLine(column);
}

Finally, I can access each individual Cell of the DataTable object like this:

DataTable table = GetMyTable();
for (int i = 0; i < table.Rows.Count; i++) {
  DataRow row = table.Rows[i];
  object[] array = row.ItemArray;
  for (int j = 0; j < array.Length; j++) {
    object cell = array[j];
    Console.WriteLine(cell);
  }
}

At least it looks like some information is lost in the third technique.

Here's my question:
How is this array of objects being managed?

I've been playing with how to recreate something with this basic type of functionality (since I am already familiar with it), but I just don't know how to design all these little sub-classes to make it work!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一笔一画续写前缘 2024-11-22 23:17:16

建立一个简单的类关系并不困难:

class Table
{
    public IEnumerable<Row> Rows { get; set; }
}
class Row
{
    public IEnumerable<Cell> Cells { get; set; }
}
class Cell { }

Making a simple class relationship isn't to difficult:

class Table
{
    public IEnumerable<Row> Rows { get; set; }
}
class Row
{
    public IEnumerable<Cell> Cells { get; set; }
}
class Cell { }
我做我的改变 2024-11-22 23:17:16

该表有一个DataColumn 列表。这是列定义的列表。该表有一个行列表。列列表中的每一行对应于每一列一个单元格。


诀窍在于行是由表创建的。该表知道Columns集合的长度,以及列的数据类型和它们的任何约束。当表创建 DataRow 时,它会使用正确的列数创建它。

The table has a list of DataColumn. This is a list of column definitions. The table has a list of rows. Each row has one cell for each column in the list of columns.


The trick is that the rows are created by the table. The table knows the length of the Columns collection, as well as the data types of the columns and any constraints on them. When the table creates a DataRow, it creates it with the correct number of columns.

惯饮孤独 2024-11-22 23:17:16

它可以像这样简单:

List<object[]> Rows {get; private set;} 

它可以让您像这样访问它:

obj[5][3]="meep.";

在实际的 DataTable 中,object[] 被包装在 DataRow 类中,该类提供了诸如Field<>等访问功能,而List<>通过DataRowCollection向外部暴露了更有限的信息量班级。

It can be as simple as:

List<object[]> Rows {get; private set;} 

Which lets you access it like:

obj[5][3]="meep.";

In the actual DataTable, object[] is wrapped in a DataRow class that provides access functions like Field<> and such, and List<> exposes a more limited amount of information to the outside through the DataRowCollection class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文