【问题标题】:Shuffle DevExpress GridControl DataSource随机播放 DevExpress GridControl 数据源
【发布时间】:2010-09-03 16:13:44
【问题描述】:

我需要洗牌 GridControl 的数据源。我在 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 顺序,则 shuffle 成功发生。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    由于您更改了最初设置为 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() end gridControl.EndUpdate() 以防止在 DataSource 的元素发生变化时对网格进行任何更新。

    【讨论】:

    • 我将 Shuffle() 方法传递给 BindingSource.DataSource,但仍然没有任何反应,BindingList 在哪里。添加了 BeginUpdate()、EndUpdate() 方法并在调用 RefreshDatasource() 之后仍然没有运气。
    • 尝试在不使用 BindingList 的情况下将 List 设置为 DataSource。例如。 gridControl.DataSource = SongsDataSource.
    • 还要检查您是否对任何列进行了排序,因为这会自动对网格中的记录进行排序,并且改组是无用的。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 2015-06-24
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      相关资源
      最近更新 更多