我需要对GridControl的DataSource进行混洗。我在UserControl中使用此属性:
private List<Song> _songsDataSource;
public List<Song> SongsDataSource
{
get { return _songsDataSource; }
set
{
_songsDataSource = value;
if (!value.IsNull())
{
SongsBindingList = new BindingList<Song>(value);
songsBinding.DataSource = SongsBindingList;
}
}
}然后,我使用克隆、随机排列并附加到SongsDataSource属性的方法:
List<Song> newList = HelpClasses.Shuffle((List<Song>) SongsDataSource.Clone());
SongsDataSource = newList;
public static List<Song> Shuffle(List<Song> source)
{
for (int i = source.Count - 1; i > 0; i--)
{
int n = rng.Next(i + 1);
Song tmp = source[n];
source[n] = source[i - 1];
source[i - 1] = tmp;
}
return source;
}奇怪的是,即使我在设置SongsDataSource方法之后使用GridControl.RefreshDataSource()方法,它似乎也没有反映出对GridControl的更改。如果我检查DataSource顺序,就会成功地进行混洗。
谢谢。
发布于 2010-09-07 15:59:41
由于您已经更改了最初设置为DataSource的对象,因此调用RefreshDataSource()不会有任何好处,因为您不能刷新不再存在的内容。你的问题在这里:
List<Song> newList = HelpClasses.Shuffle((List<Song>) SongsDataSource.Clone());
SongsDataSource = newList; // the reference has changed, the grid doesn't know what to do when RefreshDataSource() is called.您可以按原样传递列表,而不需要克隆它。还要用gridControl.BeginUpdate() end gridControl.EndUpdate()包围Shuffle()方法调用,以防止在DataSource的元素发生更改时对网格进行任何更新。
发布于 2010-11-19 15:59:22
我和DevExpress GridControl有过这样的问题。我认为,这种情况是由GridView(http://documentation.devexpress.com/#WindowsForms/clsDevExpressXtraGridViewsGridGridViewtopic)造成的,它为每个GridControl自动创建。这是负责DataSource可视化的GridControl的一部分。如果您需要更改DataSource,请尝试:
GridView.Columns.Clear();
GridControl.DataSource = You_New_DataSource;
GridView.RefreshData();
GridControl.RefreshDataSource(); https://stackoverflow.com/questions/3637604
复制相似问题