【问题标题】:Sort a DataTable by a specific column rather than the primary key按特定列而不是主键对 DataTable 进行排序
【发布时间】:2015-07-27 14:13:06
【问题描述】:

我是 C# 的新手,我正在尝试将我的 Access 数据库链接到程序并对其进行操作,然后将其写入文本文件。

但是,我的数据目前是根据 ID(即主键)排序的。 我想根据姓氏对其进行排序,然后进行操作,因为当我使用“foreach(DataRow drr in dra)”时,将按 ID 的顺序检索行。

[dra->数据行]

我想在排序后访问这些行,但我不知道该怎么做。以下是我的代码。

OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect, myAccessConn11);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);

myAccessConn11.Open();
myDataAdapter.Fill(myDataSet, "Personal_Data");
myAccessConn11.Close();

DataTableCollection dta = myDataSet.Tables;
DataRowCollection dra = myDataSet.Tables["Personal_Data"].Rows;

foreach (DataRow drr in dra)
{
    *Manipulation*
}

我尝试使用myDataSet.Tables["Personal_Data"].DefaultView.Sort = "LastName DESC";,但没有成功。

有没有其他方法可以在访问表中的行之前对其进行排序?

提前致谢!

【问题讨论】:

  • strAccessSelect 是访问数据的 sql 吗?在那里订购。
  • 应用默认视图排序后,您需要调用 .ToTable() 以返回已应用 DefaultView 的结果。
  • 我之前尝试过下面发布的答案,但我遇到了一个例外,因为我的列被标记为“姓氏”。现在我删除了空间来试一试,它确实有效。这确实是一个简单的解决方案,但我不确定如何处理 String strAccessSelect 上的异常。 @Ric-是的,这就是我使用的 sql 查询。这是一个选择语句。
  • @Ahmed- 是的,我也尝试过这样做,但它没有将排序表存储回来。当我尝试访问 DataTable 时,它​​仍然给了我未排序的行

标签: c# database sorting datatable dataset


【解决方案1】:

您可以对“strAccessSelect”SQL 查询中的行进行排序,例如:

从 MyTable ORDER BY LastName ASC 中选择 Id、FirstName、LastName;

【讨论】:

  • 谢谢欧文!这是我很早就尝试做的事情。但是,我的列名是“姓氏”,中间有一个空格。当我尝试这样做时,我遇到了一个例外。现在我已将我的列重命名为“姓氏”并且它可以工作。所以我只是想知道......只是出于好奇 - 如果我的列名是姓氏而不是姓氏,你将如何重写相同的选择语句。我必须使用任何转义序列吗?
  • 您将列名括在方括号中,例如[姓] 。但最好避免在数据库列名中使用空格。
  • 哦,好吧!非常感谢!!
猜你喜欢
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
相关资源
最近更新 更多