2

アセンブリで、次のようなクラスを作成しました。

[DataObject(true)]
public class A
{
 public int Foo{get;set;}

 [DataObjectMethod[DataObjectMethodType.Select)]
 public static List<A> GetAllA(string ConnectionString)
 {
   // return filled List<A>
 }
}

次に、このリストをWinformsの下のGridcontrolで表示したいと思います。私はDataGridについてです。
私はASP.netから来ていますが、最初に考えたのは

this.dataGridView1.DataSource = A.GetAllA(ConnectionString)

動作しますが、BindingSourcesを使用したより優れたデータバインディングをお勧めします。(それが道だといつも聞いていたので)
BindingSourceをフォームにドロップし、DataSourceプロパティをクラスAに設定しました。
しかし、SelectMethodとそのパラメーターはどこで設定できますか?dataGridViewのDataSourceプロパティをBindingSourceに設定すると、空の行のみが表示されます。

これは正しい方法ですか?ウィザードで数回クリックするだけで済みますか、それともこれを機能させるために大量のドキュメントを読む必要がありますか?

編集:選択したメソッドに自動的にバインドする方法もありますか?または、BindingSourceは列のマッピングのみをサポートし、実際にはデータのバインドをサポートしていません。つまり、それでもDataSourceプロパティを設定する必要がありますか?

4

2 に答える 2

1

を作成する必要がありますDataSource。「データ」メニューをクリックし、「新しいデータソースを追加...」を選択します。

VisualStudioのデータへの接続の概要
http://msdn.microsoft.com/en-us/library/wxt2cwcc(VS.80).aspx

アプリケーションをデータベース、Webサービス、またはオブジェクトのデータに接続するには、[データソース]ウィンドウ から[新しいデータソースの追加]を選択して、データソース構成ウィザードを実行します。

Public Class A
    Private _field As String
    Public Property Field() As String
        Get
            Return _field
        End Get
        Set(ByVal value As String)
            _field = value
        End Set
    End Property
End Class

Public Class AListing
    Inherits List(Of A)
End Class
  • AListingデータソースを追加するときにオブジェクトとして使用します。ナビゲーションを提供するグリッドビューまたは詳細フォームに適しています。それを投入するのはあなた次第です。
  • Aデータソースを追加するときにオブジェクトとして使用します。1つのインスタンスにバインドするだけでよい場合のダイアログに適しています。それを投入するのはあなた次第です。

データソースは、設計者がデータバインディングを構成するのに役立ちます。あなたはまだオブジェクトを埋める必要があります。デザイナーのサポートを気にしない場合は、電話をかけるのは問題ありません。BindingSourceを使用すると、「データテーブル」のようなオブジェクトを使用できるようになります。あなたの例を使用すると、BindingSourceを使用すると、追加の処理のためにCurrentChangedイベントを処理できます。

this.dataGridView1.DataSource = A.GetAllA(ConnectionString);
//-or-
this.bindingSource1.DataSource = A.GetAllA(ConnectionString);
于 2010-03-26T01:16:18.030 に答える
0

クラスAに、GetAllAメソッドのパラメーターとしてではなく、構成ファイルから接続文字列を取得させます。メソッドにパラメータがなくなると、ウィザードでそのメソッドを選択できるようになります。

于 2010-03-26T00:34:40.220 に答える