asp.net2.0 の ObjectDataSource を使用すると、GridView などのデータ表示コントロールを表示および編集用にバインドできるようになります。組み込みのページング、並べ替えなどもサポートします。 ORM を使用した後は、ObjectDataSource も使用できます。
ここでのページングは、データベースからすべてのページを取り出して選択的にバインドするのではなく、データベース内のページを直接取り出してバインドします。その差は依然として大きく、効率は大幅に向上します。
編集、作成、並べ替えはすべて ObjectDataSource によって直接提供され、GridView でコードを記述する必要はありません。
このように、オブジェクトのデザインには、少なくともデータベース操作に関しては多くのロジックを含めることができ、UI はそれを剥がして少し開けば比較的シンプルに見えますが、勝つためにはそれを移植する方が有益です。将来的には、それを SmartClient にすることもできます。
これについては、 http://www.evosoftworks.com/Articles/wormods.aspx で詳しく説明されているブログを参照してください。
たまたまWilsonORMを使っていたのでそれに合わせて作りました。
基本的な構造は次のとおりです。
UI (GridView およびその他のコントロール -- ObjectDataSource コントロール)--->ObjectDataSource クラス (オブジェクト、CRUD ページングおよびその他のロジックの書き込み)--->(ORM は CRUD を実装)--->DB には
いくつかの主要な手順があります
1: オブジェクトにプロパティとメソッドを追加して、CRUD、ページング、その他のロジックを完成させます
2: GridView などの UI コントロールを構成して、ObjectDataSource コントロールに接続します。
まずは1つ目から見てみましょう
1: オブジェクトにプロパティとメソッドを追加して、CRUD、ページング、その他のロジックを完成させます。 DB構造に基づいてツールによりオブジェクトクラスが生成され、マッピングファイルも生成されます。
まず、識別属性 DataObject() を System.ComponentModel 名前空間 [DataObject()] のオブジェクトに追加します。
パブリック クラス ProductDescription
{2 番目に、このオブジェクト クラスに CRUD メソッドを追加します。
まず Insert メソッドを見てみましょう
[DataObjectMethod(DataObjectMethodType.Insert)]
public static void Insert(ProductDescription productDescription)
{
試す
{
Manager.DataManager.StartTracking(productDescription, InitialState.Inserted);
Manager.DataManager.PersistChanges(productDescription);
}
catch (例外例)
{
log.Error(ex);
}
このメソッドの前には、これが Insert メソッドであることを示す [DataObjectMethod(DataObjectMethodType.Insert)] 属性が必要です。
このメソッドは静的なパブリック メソッドです。
パラメータはオブジェクト自体のインスタンスです。ロジックが理解しやすく、すべてオブジェクト上で動作するため、この方が優れています。
残りの Delete メソッドと Update メソッドもこの方法で記述されます。
次に、非常に特殊な Select メソッドを見てみましょう。
方法の選択
1 [DataObjectMethod(DataObjectMethodType.Select)]
2 public Collection<ProductDescription> Retrieve(string query, int maxRows, int startRowIndex, string sortClause)
3 {
4 試してみる
5 {
6 int numPages = 0;
7 if (sortClause == null || sortClause == "")
8 sortClause = "更新日の説明";
9 コレクション<ProductDescription> cs;
10 cs = RetrievePage(query, sortClause, maxRows, (int)Math.Ceiling((double)startRowIndex / maxRows) + 1, out numPages);
11 _numRecs = ((IObjectPage)cs).TotalCount;
12 リターン cs;
13}
14 キャッチ (例外例)
15 {
16 ログ.エラー(ex);
17 null を返します。
18}
19}
20 [DataObjectMethod(DataObjectMethodType.Select)]
21 static public ObjectSet Retrieve(文字列キー、文字列値)
22 {
23 if (値 == null || 値 == "")
24 null を返します。
25 トライ
26 {
27 QueryHelper ヘルパー = Manager.DataManager.QueryHelper;
28 Key = helper.GetFieldName(typeof(ProductDescription).ToString() + "." + Key);
29 ObjectQuery クエリ = new ObjectQuery(typeof(ProductDescription), String.Format("{0}='{1}'", Key, Value), "");
30 オブジェクトセット obj = Manager.DataManager.GetObjectSet(クエリ);
31 オブジェクトを返します。
32}
33 キャッチ (例外例)
34 {
35 ログ.エラー(ex);
36 null を返します。
37 }
38 }
39
40 public int RecCount(string query, int maxRows, int startRowIndex, string sortClause)
41 {
42 _numRecs を返します;
43}
44
45 public static Collection<ProductDescription> RetrievePage(string whereClause, string sortClause, int pageSize, int pageIndex, out int pageCount)
46 {
47 ObjectQuery<ProductDescription> query = new ObjectQuery<ProductDescription>(whereClause, sortClause, pageSize, pageIndex);
48 ObjectSet<ProductDescription> pageSet = Manager.DataManager.GetObjectSet<ProductDescription>(クエリ);
49 ページカウント = ページセット.ページカウント;
50 戻りページセット;
51 } 最初のメソッドは public Collection<ProductDescription> Retrieve(string query, int maxRows, int startRowIndex, string sortClause) で、組み込みのページングと並べ替えを実装できるメソッドです。このコードは _numRecs = ((IObjectPage)cs).TotalCount; ここで、ページング後に総ページ数がすぐに取得され、これは、メソッド public int RecCount() に使用されることに注意してください。 string query、int maxRows、int startRowIndex、string sortClause) はレコード数を取得するために使用されます。これら 2 つのメソッドは対応している必要があり、パラメーターは同じであることに注意してください。
2 番目のメソッドである static public ObjectSet Retrieve(string Key, string Value) は、単純にレコードを取得します。 DetailView/FormViewの表示で使用できます。
コードは量が多いように見えますが、実際には非常にパターン化されているため、CodeSmith を使用するか、ORMHelper ツールを直接変更して、コードを手動で記述せずにコードを動的に生成できます。
この 4 つの方法で CRUD、ページング、ソートが完了します。このようなオブジェクトは UI とは関係がなく、データ ロジックのみを持ちます。
2: UI の構成。 UI 構成も、GridView とその他の表示コントロールの 2 つのレイヤーに分かれています。
次に、GridView などのコントロールのオブジェクト データ ソースを構成し、オブジェクトに直接接続して、表示や編集などの機能を実装します。実際には、ObjectDataSource に接続されたプロパティを設定します。
<asp:GridView ID="gv_data" runat="server"AllowPaging="True"AllowSorting="True" DataSourceID="ods_list"
これは ObjectDataSource コントロールの構成です
オブジェクトデータソース
1<asp:ObjectDataSource ID="ods_list" runat="server" DataObjectTypeName="BusinessModel.ProductDescription"
2 DeleteMethod="削除" OldValuesParameterFormatString="original_{0}" SelectMethod="取得"
3 TypeName="BusinessModel.ProductDescription" UpdateMethod="Update" SortParameterName="sortClause"
4 MaximumRowsParameterName="maxRows" SelectCountMethod="RecCount" EnablePaging="true"
5 ConflictDetection="OverwriteChanges" ConvertNullToDBNull="false">
6 <パラメータの選択>
7 <asp:Parameter Name="query" Type="String" />
8 <asp:パラメータ名="maxRows" タイプ="Int32" />
9 <asp:パラメータ名="startRowIndex" タイプ="Int32" />
10 <asp:パラメータ名="sortClause" タイプ="文字列" />
11 </パラメータの選択>
12</asp:オブジェクトデータソース>
内部のプロパティを見てください。これは、CRUD メソッドと対応するメソッド名を構成するためのパラメーターです。これらはまさにクラスに実装したものです。たとえば、ここでは Delete メソッドが構成されています: DeleteMethod="Delete"; 先ほど述べたレコード数の属性は SelectCountMethod="RecCount"; です。
ここでパラメータを渡すにはどうすればよいでしょうか?システム関連の属性 (maxRows、startRowIndex など) は、コードによって渡すこともできます。
http://dlwang2002.cnblogs .com/archive/2006/06/11/422991.html