Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Член ... не содержит поддерживаемого преобразования

61K
07 июля 2010 года
Остряк-саоучка
4 / / 07.07.2010
Всем привет. Возник следующий вопрос:

Я использую коннект к БД через Linq. Создал два объекта
Automats и games в отношении 1:M которые завязал на БД.

Для получения имени игры я использую custom property

Код:
partial class Automat
{
   public string GameName
   {
      get
         {
            return Games == null ? "Неизвестная игра" : Games.Title;;
         }
     
   }
}


Далее замапил этот объект на GridView
Когда делаю сортировку GridView по полу GameName у меня вылетает exception
Член "BusinessObjects.Automat.GameName" не содержит поддерживаемого преобразования в SQL.

английский вариант сообщения

the member "BusinessObjects.Automat.GameName" has no supported translation to SQL

Подскажите в чем пожет быть причина
61K
08 июля 2010 года
Остряк-саоучка
4 / / 07.07.2010
Если добавить аттрибут Column для этого поля то сортировка не выпадает, однако сортирует не по тем элементам.
Нужно каким-то образом переопределить стандартрую функцию сортировки и выборки.
279
08 июля 2010 года
bave
456 / / 07.03.2004
Сам запрос выборки должен уметь сортировать, причем по любым полям выборки, т.е. по sortExpression...

Если у GridView-а AllowSorting="True", тогда твой DataSource (ObjectDataSource) - должен тоже поддерживать сортировку и его свойству SortParameterName должно быть присвоено имя параметра в методе выборки через который передается выражение сортировки (sortExpression).

Т.е. если ты хочешь, чтобы в GridView работала сортировка (чтобы было AllowSorting="True") - обеспечь свой DataSource таким методом выборки, который сможет принмать параметр указанный в SortParameterName и будет знать, что с ним делать.
61K
08 июля 2010 года
Остряк-саоучка
4 / / 07.07.2010
Если не трудно, сможете написать как мне обеспечить свой DataSource таким методом выборки?
Как я понимаю на форме есть параметр OrderBy и мне надо написать метод выполняющий сортировку.
279
08 июля 2010 года
bave
456 / / 07.03.2004
Цитата:
Как я понимаю на форме есть параметр OrderBy и мне надо написать метод выполняющий сортировку



Неа, сортировку выполняет сам метод выборки, а как сортировать он знает из выражения сортировки, которое ему сформирует GridView по тем полям, которые ему для этого указаны...
-------------------------------------------
Вот, например, GridView в котором используется сортировка,
для примера оставил в нем колонку c названием организации -
она сортируется по полю Name (это поле есть в результате запроса,
вернее сказать это поле - свойство класса мапера соответствующего).

Код:
<!-- мой GridView -->
<!-- в качестве DataSource-а - ObjectDataSource -->
<asp:GridView ID="gvClientsOrganizations" runat="server" AllowPaging="True"
    AllowSorting="True"
    AutoGenerateColumns="False"
   DataSourceID="odsClientsOrganizations" CssClass="common_list"
   &#111;&#110;selectedindexchanged="gvClientsOrganizations_SelectedIndexChanged">
   <Columns>
       <asp:TemplateField HeaderText="Название организации" SortExpression="Name">
             <ItemTemplate>
                  <!-- много чего попало... -->
             </ItemTemplate>
       </asp:TemplateField>
       <!-- всякие другие колонки...  -->
        ...
        ...
    </Columns>
</asp:GridView>


Смотрим дальше... Уэтого грида источник данных odsClientsOrganizations - это
ObjectDataSource, он выглядит так:

 
Код:
<asp:ObjectDataSource ID="odsClientsOrganizations" runat="server" OldValuesParameterFormatString="original_{0}"
                &#111;&#110;ObjectCreating="odsClientsOrganizations_ObjectCreating" SelectMethod="GetClientsOrganizations"
                UpdateMethod="Update" TypeName="SmallBusinessOnline.Business.ClientOrganization"
                EnablePaging="True" MaximumRowsParameterName="endRowIndex" SelectCountMethod="GetCountClientsOrganizations"
                SortParameterName="sortExpression"></asp:ObjectDataSource>


Т.е. в источнике данных выборкой занимается метод GetClientsOrganizations -
это метод бизнесс класса SmallBusinessOnline.Business.ClientOrganization.

смотрим на этот метод:
Код:
/// <summary>
        /// Получение списка организаций-клиентов
        /// </summary>
        /// <param name="startRowIndex">индекс первой записи</param>
        /// <param name="endRowIndex">индекс последней запси</param>
        /// <param name="sortExpression">выражение сортировки</param>
        /// <returns>список организаций</returns>
        [System.ComponentModel.DataObjectMethodAttribute(
            System.ComponentModel.DataObjectMethodType.Select, true)]
        public ClientOrganizationCollection GetClientsOrganizations(string sortExpression, int endRowIndex, int startRowIndex)
        {
            return RezultTranslator(ClientsOrganizationsDataAccess.GetClientsOrganizations(startRowIndex, endRowIndex, sortExpression));
        }


Как видишь у метода выборки есть параметр sortExpressionх -назвать его, можно было как угодно, главное, что источник данных знает что это за параметр, потому что SortParameterName="sortExpression" (см. код ObjectDataSource-а)

само выражение сортировки будет автоматически формироваться гридом при кликах по колонкам и само собой будет передоваться в мето выборки, а вот метод выборки уже знает что с ним делать - он и данные выбирает, он и сортирует их... - т.е. где то
далеко в недрах метода выборки (где-то на уровне DAL) - происходит вызов ХП-шки,
ктороая и выбирает и сортирует и на страницы разбивает и все что угодно делает...
-------------------
У тебя будет несколько иначе, так используется LINQ - у тебя отличаи должны начинаться с иточника данных - у меня как видишь он все получает из
бизнесс объекта, а у тебя от куда?...

Покажи свой код DataSource-а, может станет понятней как тебе помочь...
61K
19 июля 2010 года
Остряк-саоучка
4 / / 07.07.2010
Спасибо огромное. Скоро проверю. Уверен что все должно быть в порядке. Проверю - отпишусь

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог