数据表的最后一行作为第一行
本文关键字:一行 数据表 最后 | 更新日期: 2023-09-27 17:54:57
所以我这里有一个代码片段,除了一行是InsertAt()部分。我想知道是否有可能复制最后一行并将其插入为第一行。你可以这样想。这可能可以在它背后的SQL单独完成,但这个应用程序是为一个非常旧的数据库和oracle设计的,所以直到系统完全迁移,它必须这样做,不幸的是。
前- 装运地点1
- 装运地点2
- 装运地点2
- 起始位置
- 装运地点1
- 装运地点2
- 装运地点3
- 目标位置
代码片段:
// Create a DataTable with a list of shipments.
DataTable dt = c.Query(c.qShipments(Row.Cells[0].Value.ToString()));
// Check if there is at least one shipment
if (dt.Rows.Count >= 1)
{
// Add the destination of the shipments
dt.Rows.Add(0, 0, 9999, textBox_CC.Text, textBox_PC.Text, textBox_SL.Text);
// Add the starting location (which is the same as the destination. It has to be at the top of the DataTable
dt.Rows.InsertAt(dt.Rows[dt.Rows.Count - 1], 0); // The code
// Finally calculate and return the object to populate the datagridview with.
dataGridView_CalculatedRoutes.Rows.Add(x.getRoute(dt));
}
tldr;
问题:代码返回行属于另一个表。
问题:如何使最后一行也成为第一行?
编辑问题:如何使最后一行既是第一行又是最后一行。(相同的行)
您可以创建一个新的DataTable
,并按照您想要的顺序导入行:
// Create a DataTable with a list of shipments.
DataTable dt = c.Query(c.qShipments(Row.Cells[0].Value.ToString()));
// Check if there is at least one shipment
if (dt.Rows.Count >= 1)
{
DataTable customDt = new DataTable();
// Add the starting location (which is the same as the destination. It has to be at
customDt.Rows.Add(0, 0, 9999, textBox_CC.Text, textBox_PC.Text, textBox_SL.Text);
foreach(DataRow row in dt.Rows)
{
customDt.ImportRow(row);
}
// Add the destination of the shipments
customDt.ImportRow(customDt.Rows[0]);
// Finally calculate and return the object to populate the datagridview with.
dataGridView_CalculatedRoutes.Rows.Add(x.getRoute(dt));
}
要添加的行已经是该数据表的一部分。你得先把它取出来。在一个简短的测试中,我发现删除一行似乎删除了该行中的数据,因此Remove()
和InsertAt()
似乎不起作用。
但是您可以创建一个新行,将数据复制到该行并插入。之后,您可以删除旧行。例如(使用Linqpad进行测试):
void Main()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Test", typeof(System.String)));
var row = dt.NewRow();
row["Test"] = "1";
dt.Rows.Add(row);
row = dt.NewRow();
row["Test"] = "2";
dt.Rows.Add(row);
row = dt.NewRow();
row["Test"] = "3";
dt.Rows.Add(row);
Console.WriteLine("Order before Remove/InsertAt");
foreach(DataRow rw in dt.Rows)
{
Console.WriteLine(rw["Test"]);
}
var lastRow = dt.Rows[dt.Rows.Count - 1];
var newFirstRow = dt.NewRow();
newFirstRow.ItemArray = lastRow.ItemArray;
dt.Rows.Remove(lastRow);
dt.Rows.InsertAt(newFirstRow, 0);
Console.WriteLine("Order after Remove/InsertAt");
foreach(DataRow rw in dt.Rows)
{
Console.WriteLine(rw["Test"]);
}
}
预期输出为:
Order before Remove/InsertAt
1
2
3
Order after Remove/InsertAt
3
1
2