C#datagridview列在排序时清除
列“5”和“6”是我在加载数据源后添加的问题列。除了我创建的两列(5和6)之外,我还可以对任何列进行排序,但当我对任何列进行排序时,我创建的两列将清除我添加的所有数据,我似乎无法理解它为什么这样做。C#datagridview列在排序时清除,c#,datagridview,issue-tracking,gridview-sorting,C#,Datagridview,Issue Tracking,Gridview Sorting,列“5”和“6”是我在加载数据源后添加的问题列。除了我创建的两列(5和6)之外,我还可以对任何列进行排序,但当我对任何列进行排序时,我创建的两列将清除我添加的所有数据,我似乎无法理解它为什么这样做。 提前谢谢 将DataGridView控件绑定到外部数据源时,排序时不会自动保留非数据绑定单元格。添加的列不在数据集中,因此会被清除。如果列“5”和“6”是从行数据派生的,则可以尝试在DataGridView.RowsAdded事件中填充它们。或者,您可以在DataGridView.Sorted事件中
提前谢谢 将DataGridView控件绑定到外部数据源时,排序时不会自动保留非数据绑定单元格。添加的列不在数据集中,因此会被清除。如果列“5”和“6”是从行数据派生的,则可以尝试在DataGridView.RowsAdded事件中填充它们。或者,您可以在DataGridView.Sorted事件中重新加载这些列
var ds = new DataSet();
ds.ReadXml(XMLFile);
DataGridLogView.DataSource = ds.Tables["Header"];
DataGridLogView.DataMember = "Data";
DataGridLogView.Columns.Add("5", "Record #");
DataGridLogView.Columns.Add("6", "Record");
在设置datagridviews数据源之前,我必须将列添加到数据集中,然后排序工作就完美了。我认为这个答案很好,但我唯一的问题是,我使用的是由50k-100k行组成的较大文件,并从文件中分两列加载,尽管如此,在每种排序上重新加载这些数据似乎都会导致性能问题。数据是如何输入到不属于“DataTable”的两列中的?@JohnG我从文本文件中加载它。是什么决定了网格中的哪一行属于哪一个文本数据?您是否考虑过在读入第一个数据后将列添加到
数据表
?将列添加到已有数据源的网格时,必须管理这些列。我会尝试将这些列添加到数据表中,看看这是否有帮助。我相信这将在分拣时保持物品在原位;但是,我不太确定性能是否会提高。@JohnG我首先将XML文件加载到数据网格中,因为我的文本文件将文本文件中的记录编号与XML文件中的记录编号相匹配,以知道哪一行要去哪里。在它当前的状态下,性能没有问题,但是由于这个排序功能清除了我的行,它使我的程序变得不那么有用。正如我在上一篇评论中所说的,为此使用一个DataTable
,将解决排序问题。您没有说明如何完成文本文件的第二次读取以及如何将数据添加到网格中。如果使用循环读取第二个数据,那么(正如我前面建议的那样),将两个额外的列添加到数据表
而不是网格中……然后在循环/读取文本数据时,将值放入数据表
中的相应行中。想法是,将数据添加到DataTable
而不是网格中,然后排序应该按预期工作。
datatable.Columns.Add("Record #", typeof(string));
datatable.Columns.Add("Record", typeof(string));