我有一个带有DataTable数据源的listBox。我正在尝试创建一个按钮,将DataRow向上移动DataTable。
这是我正在尝试的代码。但是当它运行时,它会删除正确的Datarow,但会在正确的位置插入一个空行。
DataRow row;
row = SelectedPlayersHome.Rows[selectedIndex];
int temp = SelectedPlayersHome.Rows.IndexOf(row);
SelectedPlayersHome.Rows.RemoveAt(temp);
SelectedPlayersHome.Rows.InsertAt(row, temp - 1);
即使我正在创建该行的副本,但是当我从表中删除该行时,它会删除新创建的行中的数据。
关于如何解决这个问题的想法?
答案 0 :(得分:2)
通过这样做:
row = SelectedPlayersHome.Rows[selectedIndex];
实际上,您并未创建该行的副本,而是将该行的引用分配给row
变量。
你应该这样做:
DataRow row = SelectedPlayersHome.NewRow();
DataRow selectedRow= SelectedPlayersHome.Rows[selectedIndex];
row.ItemArray= selectedRow.ItemArray; // <-- copy data
SelectedPlayersHome.Rows.Remove(selectedRow);
SelectedPlayersHome.Rows.InsertAt(row, selectedIndex +1/-1); // depending if you want to go up or down