1

Telerikフォーラムでこの質問をしましたが、返信はありませんでした。

私は以前にこのトピックが出てくるのを見たことがありますが、答えがないので、問題をできるだけ簡単に定義したいと思いました。

クエリを作成するLINQコマンドがあります。

var gridData = from au in dc.aspnet_Users join aur in dc.aspnet_UsersInRoles
on au.UserId equals aur.UserId join ar in dc.aspnet_Roles
on aur.RoleId equals ar.RoleId join am in dc.aspnet_Memberships
on au.UserIdequalsam。 UserId select new {au.UserName、ar.RoleName、am.Email、am.IsApproved、am.IsLockedOut};

重要な点は、これが1つ以上のテーブルを使用することです。

注:これは、標準のASP.NETメンバーシップフレームワークを使用してRolesテーブルとUsersテーブルにアクセスしています。

次に、単純な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をデータセットに使用できますが、これもデータセットアダプターが単一のテーブルにアクセスしている場合にのみ機能します。

さまざまな提案されたデモとサンプルコードを見てきましたが、それらはすべて複数のテーブル/結合の問題を無視しています。

www.telerik.com/community/code-library/aspnet-ajax/grid/automatic-operations-with-linqdatasource.aspx

demos.telerik.com/aspnet-ajax/grid/examples/dataediting/threelevel/defaultcs.aspx

www.telerik.com/community/code-library/aspnet-ajax/grid/automatic-operations-with-linqdatasource.aspx

私はLINQと結婚していません。複数のテーブルへの更新と編集をサポートできるRadGridを取得するために適応することは非常にうれしいです。

更新と編集が利用可能な複数のテーブルから構成されるレコードを表示するRadGridを実現するにはどうすればよいですか?

助けてくれてありがとうリチャード

4

3 に答える 3

1

DataBind()呼び出しではなくNeedDataSourceバインディングを使用しないのはなぜですか?したがって、Telerikグリッドは、余分なコーディングなしで編集状態を管理する必要があります。さまざまなソーステーブルに結合を使用し、適切なT-SQLステートメントを使用してコマンドを更新または挿入するように設定すると、すべてが正常に機能するはずです。まず、このデモをチェックしてください。

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

ディック

于 2010-03-03T16:53:02.410 に答える
1

ADO.net の dataview クラスをデータセット クラスと組み合わせて使用​​することを検討しましたか? 使用しているデータベースのタイプがストアド プロシージャである場合は、system.data.sqlclient クラスを使用してデータをプルできるはずです。データベースのリレーションシップをデータセット クラスに保存できます。また、データビュー クラスを使用すると、データを単一のテーブルであるかのように表示できます。次に、データビュー クラスを Telerik コントロールにバインドできるはずです。

于 2010-03-03T14:58:19.110 に答える
0

LINQ クエリが読み取り専用の匿名型を返すことがわかりました。

ストアド プロシージャを使用して SQLDataSource に置き換えたので、現在は機能しています。

ありがとう

于 2010-03-04T10:26:25.453 に答える