Как мне отредактировать Telerik RadGrid при использовании нескольких таблиц в качестве источника данных - PullRequest
1 голос
/ 03 марта 2010

Я задал этот вопрос на форумах Telerik без ответа, поэтому я клянусь с вами.

Я видел эту тему раньше, но без ответа, поэтому я решил определить проблему как можно проще.

У меня есть команда LINQ, создающая запрос:

var gridData = от au в dc.aspnet_Users присоединиться к aur в dc.aspnet_UsersInRoles
на au.UserId равно aur.UserId присоединиться к ar в dc.aspnet_Roles
на aur.RoleId равно ar.RoleId присоединяюсь в dc.aspnet_Memberships
на au.UserId равно am.UserId выберите новый { au.UserName, ar.RoleName, am.Email, am.IsApproved, am.IsLockedOut };

ВАЖНО ТО, ЧТО ЭТО ИСПОЛЬЗУЕТ БОЛЬШЕ, ЧЕМ 1 ТАБЛИЦА.

Примечание. Для доступа к таблицам ролей и пользователей используется стандартная структура членства ASP.NET.

Тогда у меня есть простая RadGrid:

<MasterTableView EditMode="InPlace"> 
   <RowIndicatorColumn> 
         <HeaderStyle Width="20px"></HeaderStyle> 
   </RowIndicatorColumn> 
   <ExpandCollapseColumn> 
         <HeaderStyle Width="20px"></HeaderStyle> 
   </ExpandCollapseColumn> 
</MasterTableView> 

Наконец я связываю данные с сеткой в ​​Page_Load

    rgUsers.AutoGenerateColumns = true; 
    rgUsers.DataSource = gridData.ToList(); 
    rgUsers.DataBind(); 
    rgUsers.EditIndexes.Add(1); 
    rgUsers.DataBind(); 

    GridView1.AutoGenerateColumns = true; 
    GridView1.DataSource = gridData.ToList(); 
    GridView1.DataBind(); 
    GridView1.EditIndex=1;         
    GridView1.DataBind(); 

Это будет правильно отображать данные из 4 таблиц.

Я включил GridView для сравнения функциональности.

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

Однако в режиме редактирования поля RadGrid недоступны для редактирования.

Я пробовал следующее:

1) 1) Я могу использовать LinqDataSource, который позволяет редактировать / обновлять НО, только если в запросе LINQ есть только 1 таблица.

2) 2) Я могу использовать ObjectDataSource для набора данных, но еще раз это работает, только если адаптер набора данных обращается к одной таблице.

Я посмотрел на предложенные variouse демонстрации и пример кода, но все они проигнорировали проблему множественных таблиц / Join:

www.telerik.com / сообщество / код-библиотека / САШИ-Аякс / сетки / автоматическая-операция-с-linqdatasource.aspx

demos.telerik.com / САШИ-Аякс / сетки / примеры / dataediting / threelevel / defaultcs.aspx

www.telerik.com / сообщество / код-библиотека / САШИ-Аякс / сетки / автоматическая-операция-с-linqdatasource.aspx

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

Что я должен сделать, чтобы создать RadGrid, который отображает записи, составленные из нескольких таблиц с доступными Update и Edit?

Спасибо за любую помощь Ричард

Ответы [ 3 ]

1 голос
/ 03 марта 2010

Почему бы не использовать привязку NeedDataSource в отличие от вызовов DataBind ()? Таким образом, сетка Telerik должна управлять своими состояниями редактирования без дополнительного кодирования. Если вы используете объединения для разных исходных таблиц и устанавливаете команды обновления или вставки с использованием соответствующих операторов T-SQL, все должно работать нормально. Проверьте это демо для начала:

http://demos.telerik.com/aspnet-ajax/grid/examples/dataediting/extractvalues/defaultcs.aspx

Dick

1 голос
/ 03 марта 2010

Рассматривали ли вы использование класса данных ADO.net в сочетании с классом набора данных? Вы должны быть в состоянии получить данные с помощью класса system.data.sqlclient с сохраненным процессом, если это тип базы данных, которую вы используете. Вы можете сохранить отношения вашей базы данных в классе набора данных, а класс dataview позволит вам просматривать данные, как если бы это была одна таблица. Тогда вы сможете связать класс dataview с элементом управления Telerik.

0 голосов
/ 04 марта 2010

Оказывается, что запрос LINQ возвращает анонимный тип только для чтения.

Я заменил его на SQLDataSource, используя хранимые процедуры, поэтому теперь он работает.

Спасибо

...