首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shuffle DevExpress GridControl DataSource

Shuffle DevExpress GridControl DataSource
EN

Stack Overflow用户
提问于 2010-09-04 00:13:45
回答 2查看 4.5K关注 0票数 1

我需要对GridControl的DataSource进行混洗。我在UserControl中使用此属性:

代码语言:javascript
复制
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属性的方法:

代码语言:javascript
复制
    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顺序,就会成功地进行混洗。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2010-09-07 15:59:41

由于您已经更改了最初设置为DataSource的对象,因此调用RefreshDataSource()不会有任何好处,因为您不能刷新不再存在的内容。你的问题在这里:

代码语言:javascript
复制
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的元素发生更改时对网格进行任何更新。

票数 0
EN

Stack Overflow用户

发布于 2010-11-19 15:59:22

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

代码语言:javascript
复制
GridView.Columns.Clear();
GridControl.DataSource = You_New_DataSource;
GridView.RefreshData();
GridControl.RefreshDataSource(); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3637604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档