Shuffle DevExpress GridControl DataSource - PullRequest
       31

Shuffle DevExpress GridControl DataSource

1 голос
/ 03 сентября 2010

Мне нужно перетасовать источник данных 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;
        }

Странно то, что он не отражает изменений в GridControl, даже если я использую метод GridControl.RefreshDataSource () после установки метода SongsDataSource. Если я проверяю порядок источника данных, случайное перемешивание произошло успешно.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2010

У меня были такие проблемы с 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(); 
0 голосов
/ 07 сентября 2010

Поскольку вы изменили объект, изначально установленный как источник данных, вызов 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 изменяются.

...