Shuffle DevExpress GridControl DataSource

时间:2010-09-03 16:13:45

标签: data-binding gridview c#-4.0 devexpress

我需要洗牌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;
        }

奇怪的是,它似乎没有反映GridControl的更改,即使我在设置SongsDataSource方法后使用GridControl.RefreshDataSource()方法。如果我检查DataSource订单,则成功发生了shuffle。

谢谢。

2 个答案:

答案 0 :(得分:0)

由于您已经更改了最初设置为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.

您可以按原样传递列表,而无需克隆它。同时使用Shuffle()结束gridControl.BeginUpdate()围绕gridControl.EndUpdate()方法调用,以防止在DataSource的元素发生变化时对网格进行任何更新。

答案 1 :(得分:0)

我在DevExpress GridControl中遇到过这样的问题。我认为,这种情况是由GridView(http://documentation.devexpress.com/#WindowsForms/clsDevExpressXtraGridViewsGridGridViewtopic)引起的,它为每个GridControl自动创建。 这是GridControl的一部分,负责DataSource的可视化。 如果您需要更改DataSource,请尝试:

GridView.Columns.Clear();
GridControl.DataSource = You_New_DataSource;
GridView.RefreshData();
GridControl.RefreshDataSource();