ASP.net c # Сортировка таблицы данных - PullRequest
3 голосов
/ 28 января 2011

Я использую DAL и не могу понять, как отсортировать возвращенную таблицу данных. Дело выдает ошибку, и intellisense не предлагает мне особой помощи:

// Get all the specifications available to this user
Artwork.tblSpecificationsDataTable dsCommon = new Artwork.tblSpecificationsDataTable();            
 using (tblSpecificationsTableAdapter specAdapter = new tblSpecificationsTableAdapter())
 {
  specAdapter.FillByClientID(dsCommon, Master.loginData.loggedInUser.company.ID);
  }

 DataView v = dsCommon.DefaultView;
 v.Sort = "category DESC";
 dsCommon = (Artwork.tblSpecificationsDataTable)v.ToTable();

 for (int i = 0; i < dsCommon.Count; i++)
  {
   test.Text += dsCommon[i].category + " " + dsCommon[i].FlatSize + "<br />";
  }

Ошибка без приведения:

Ошибка 3 Не удается неявно преобразовать тип System.Data.DataTable для 'Artwork.tblSpecificationsDataTable. Явное преобразование существует (вы пропустил актерский состав?)

Редактировать

По-видимому, я должен выполнять сортировку в запросе, что нормально, но я хочу, чтобы опция ORDER BY любого из дюжины полей без необходимости создавать дюжину запросов в адаптере таблицы, как мне это сделать? *

Ответы [ 2 ]

2 голосов
/ 28 января 2011

Не обязательно правильно утверждать, что база данных будет выполнять сортировку быстрее, чем клиент - в большинстве случаев это утверждение верно, но вам придется взглянуть на план запроса в SQL Сервер, чтобы увидеть, будет ли он действительно быстрее.

Вы можете написать такой запрос, который позволяет динамическую сортировку в адаптере таблицы ...

SELECT
    <field list>
FROM
    <TableName>
WHERE
    <Clause>
ORDER BY
CASE @OrderBy
    WHEN 'Field1' THEN Field1
    WHEN 'Field2' THEN Field2
    WHEN 'Field3' THEN Field3
END
2 голосов
/ 28 января 2011

Вот предположение.Согласно MSDN, DataView.ToTable() возвращает новый DataTable.Но вы передаете это существующей переменной dsCommon.

Существует очень похожее свойство DataView.Table, которое получает или устанавливает источник DataTable за DataView.

Ваша проблема исчезнет, ​​если вы измените строку

dsCommon = (Artwork.tblSpecificationsDataTable)v.ToTable();

на

dsCommon = (Artwork.tblSpecificationsDataTable)v.Table();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...