【问题标题】:How to adjust the order of data in Dataset by Date asc? , C#如何按日期 asc 调整数据集中数据的顺序? , C#
【发布时间】:2018-03-15 14:58:24
【问题描述】:

我从另一个Dataset 的数据中手动将数据分配给Dataset,其中两个条件满足一个,当有来自另一个Dataset 的数据时,date 字段与具有此数据的行匹配,否则我将它们添加为新行。这是完美的。

问题在于,当您完成将数据分配给Dataset 时,首先显示的数据是使用第一个条件更新的数据。

我需要按日期对数据进行排序dd\MM\yyyyyyyy/MM/dd 不考虑时间,也不管它是否更新或添加,而是按DateASC 模式排序.

//foreach (DataRow dr in ds.Tables[0].Rows)
foreach (DataRow dr in ds.Tables[0].AsEnumerable().OrderBy(x=>x.Field<DateTime>("date").Date).ToList())
{
    var row=dataset_manually.Tables[0].AsEnumerable().Where(x=> x.Field<DateTime>("date").Date == ((DateTime)dr["date"]).Date).FirstOrDefault();

    if (row!=null)
    {
         //Update the data
         row["entryToTurn"]=(DateTime)dr["entryToTurn"];
         row["departureToTurn"]=(DateTime)dr["departureToTurn"];
         row["turn"]=dr["turn"].ToString();
    }
    else
    {
         //Add new rows
         var row2= dataset_manually.Tables[0].NewRow();
         row2["entryToTurn"] = dr["entryToTurn"];
         row2["departureToTurn"] = dr["departureToTurn"];
         row2["turn"] = dr["turn"].ToString();
         dataset_manually.Tables[0].Rows.Add(fila2);
    }
}

由于某种原因,foreach 中的 OrderBy 不起作用。添加数据但不排序。 foreach (DataRow dr in ds.Tables[0].AsEnumerable().OrderBy(x=&gt;x.Field&lt;DateTime&gt;("date").Date).ToList())

我试过了,但没用:

dataset_manually.Tables[0].DefaultView.Sort = "date asc";

而我不能这样做:

datagridview1.Sort(datagridview1.Columns[0], ListSortDirection.Ascending);

因为这仅显示在DataGridView 中排序的数据,但是在另一侧使用Dataset 时,数据未排序,并且网格中值的位置与Dataset 中的位置不同。

期望的输出:

注意:数据不是由index分配的,它必须在date字段匹配的地方分配

环境: Visual Studio 2010 (WindowsForms C#) & .NET NetFramework 4

【问题讨论】:

  • 您是否将日期列指定为DateTime 类型?
  • @Marco 是的,该列的类型为Datetime
  • @DragandDrop 它不起作用
  • 复制行只是为了将它们按任何顺序排列是低效的,这听起来像是一个 XY 问题
  • @Plutonix 请我解决问题,在这种情况下 ds 包含 7 行,手动数据集包含 3 行,因此手动数据集将更新这 3 行的数据并添加 4缺少行

标签: c# winforms visual-studio-2010 datagridview dataset


【解决方案1】:

您的代码无法正常工作,因为您首先排序数据集,然后添加新行(所以之后)

解决方案很慢如果您在数据集内有很多行,所以我推荐不这样做,而是在将数据加载到代码后。

解决这个问题可能是:

  • 将数据从 DB 加载到 dataGridView 中
  • 从dataGridView获取dataSource作为DataTable
  • 将新数据添加到DataTable Li>
  • 排序数据表
  • 保存排序数据

排序可以通过:

DataView dv = data.DefaultView;
dv.Sort = "PrimaryColumn asc" //desc for descending
data = dv.ToTable();

【讨论】:

  • 如果我有这种情况该怎么办:DataView dv = ds.Tables["Table1","Table2"].DefaultView; dv.Sort = "PrimaryColumn asc"数据集包含两个表,如何再次分配两个表ds = dv.ToTable();不丢失第二个? span>
  • ds 是数据源吗?
  • @ aleska Ristic如何创建包含两个表的数据集的视图,排序表1并将该视图重新分配到数据集,而不会丢失第二个表 span>中的数据
  • 您表示您创建了从主的自定义数据集,您可以在自定义中更改数据。什么数据集分配给 datagridview?
  • @ aleska ristic自定义数据集是dataset_manually and它包含2个表,其中在此过程中我在使用table0和另一个过程中我使用table1,到我@ 987654326分配它dataset_manually.Tables [0]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 2022-07-13
相关资源
最近更新 更多