DataView не сортирует по возрастанию или убыванию в DataGridView - PullRequest
2 голосов
/ 30 марта 2011

Программа работает нормально, но кнопки Ascending и Descending ничего не делают. DataGridView со всеми данными из таблицы выглядит одинаково и не сортируется. Предположим, сортировать по названию. Может быть, он сортирует, но не обновляет DataGridView?

private void btnSortAscendingRecords_Click(object sender, EventArgs e)
        {
            DataView TitlesDataView = new DataView(booksDataset1.Books);

            TitlesDataView.Sort = "BookTitle ASC";

            //sort asc titles in videosgrid

        }

        private void btnSortDescendingRecords_Click(object sender, EventArgs e)
        {
            DataView TitlesDataView = new DataView(booksDataset1.Books);

            TitlesDataView.Sort = "BookTitle DESC";

            //sort descending titles in videosgrid
        }

Ответы [ 2 ]

1 голос
/ 30 марта 2011

Вы должны установить DataSource для нового DataView, который вы только что создали.Я предполагаю, что это приложение Windows Form?

Если так, то:

[YourDataGridView].DataSource = TitlesDataView;
0 голосов
/ 22 февраля 2012

Когда DataGridView связывается с DataSource ( DataView, BindingSource, Table, DataSet + "tablename" ), во всех случаях оно ссылается на DataView . Получите ссылку на этот DataView и установите Сортировка Фильтр ) по вашему желанию:

DataView dv = null;
CurrencyManager cm = (CurrencyManager)(dgv.BindingContext[dgv.DataSource, dgv.DataMember]);

if (cm.List is BindingSource)
{
    // In case of BindingSource it may be chain of BindingSources+relations
    BindingSource bs = (BindingSource)cm.List;
    while (bs.List is BindingSource)
    { bs = bs.List as BindingSource; }

    if (bs.List is DataView)
    { dv = bs.List as DataView; }
}
else if (cm.List is DataView)
{
    // dgv bind to the DataView, Table or DataSet+"tablename"
    dv = cm.List as DataView;
}

if (dv != null)
{
    dv.Sort = "somedate desc, firstname";
    // dv.Filter = "lastname = 'Smith' OR lastname = 'Doe'";

    //  You can Set the Glyphs something like this:
    int somedateColIdx = 5;    // somedate
    int firstnameColIdx = 3;   // firstname
    dgv.Columns[somedateColIdx].HeaderCell.SortGlyphDirection = SortOrder.Descending;
    dgv.Columns[firstnameColIdx].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
}

Примечание: Имена столбцов, используемые в Sort и Filter, соответствуют именам столбцов в DataTable , Имена столбцов в DataGridView - это имена элементов управления, используемые для отображения ячеек в dgv. Вы можете получить имя столбца, используемое в DataView следующим образом:

string colName = dgv.Columns[colIdx].DataPropertyName

Зависит от того, как вы хотите отслеживать отсортированные столбцы (colSequence, colName, asc / desc, dgvColIdx), вы можете решить, как создать выражение сортировки и фильтрации и установить SortGlyph в dgv (я сделал жесткий код для простоты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...