【发布时间】:2018-03-15 14:58:24
【问题描述】:
我从另一个Dataset 的数据中手动将数据分配给Dataset,其中两个条件满足一个,当有来自另一个Dataset 的数据时,date 字段与具有此数据的行匹配,否则我将它们添加为新行。这是完美的。
问题在于,当您完成将数据分配给Dataset 时,首先显示的数据是使用第一个条件更新的数据。
我需要按日期对数据进行排序
dd\MM\yyyy或yyyy/MM/dd不考虑时间,也不管它是否更新或添加,而是按Date的ASC模式排序.
//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=>x.Field<DateTime>("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