-
WinGrid コントロールをフォームに追加し、Northwind の顧客テーブルにバインドします 。
-
新しい Windows Forms プロジェクトで、Microsoft® Visual Studio® ツールボックスから UltraGrid をダブルクリックします。WinGrid はフォームに追加され、UltraWinGrid クイック スタート ダイアログ ボックスが表示されます。
-
[完了] をクリックしてダイアログ ボックスを閉じます。
-
WinGrid が選択されたままの状態で、[プロパティ] ウィンドウで Dock プロパティを指定して Fill に設定します。
-
WinGrid を Northwind データベースの顧客テーブルにバインドします。詳細は、 「WinGrid を フラット データ ソースにバインド」を参照してください。
-
UltraGridRowEditTemplate オブジェクトの新しいインスタンスを作成します 。
行の編集テンプレートを使用するには、ひとつのテンプレートを作成し、それをバンドの RowEditTemplate プロパティに設定する必要があります。コード ビハインドでフォームの Load イベントのすぐ上で、新しい UltraGridRowEditTemplate オブジェクトをインスタンス化します。フォームの Load イベントで、WinGrid の最初のバンドの RowEditTemplate プロパティをインスタンス化したばかりのテンプレートに設定します。次にテンプレートで複数の美しさに関係するプロパティを設定し、それをフォームの Controls コレクションに追加し、テンプレートを WinGrid の最初のバンドに設定します。
Dim ret As New Infragistics.Win.UltraWinGrid.UltraGridRowEditTemplate()
Private Sub Form1_Load(sender As Object, e As EventArgs)
Me.ret.Size = New Size(320, 240)
Me.ret.DialogSettings.Caption = "Contact Information"
Me.ret.Appearance.BackColor = Color.White
Me.ret.Visible = False
Me.Controls.Add(Me.ret)
Me.UltraGrid1.DisplayLayout.Bands(0).RowEditTemplate = Me.ret
End Sub
Infragistics.Win.UltraWinGrid.UltraGridRowEditTemplate ret = new Infragistics.Win.UltraWinGrid.UltraGridRowEditTemplate();
private void Form1_Load(object sender, EventArgs e)
{
this.ret.Size = new Size(320, 240);
this.ret.DialogSettings.Caption = "Contact Information";
this.ret.Appearance.BackColor = Color.White;
this.ret.Visible = false;
this.Controls.Add(this.ret);
this.ultraGrid1.DisplayLayout.Bands[0].RowEditTemplate = this.ret;
}
-
WinGridBagLayoutManager で WinGridRowEditTemplate のコントロールを管理します 。
テンプレートでコントロールを容易に管理するために、WinGridBagLayoutManager コンポーネントを使用できます。WinGridBagLayoutManager によって、グリッドのようなパターンでコンテナ コントロールにコントロールを配置できます。したがって、複数のコントロール(ラベル、テキストボックス、ボタンなど)を使用しているので、それらを管理するための簡単な方法が必要で、各コントロールの位置とサイズを自分で設定する必要はありません。
Dim gridBag As Infragistics.Win.Misc.UltraGridBagLayoutManager = _
New Infragistics.Win.Misc.UltraGridBagLayoutManager()
gridBag.ContainerControl = ret
gridBag.ExpandToFitHeight = True
gridBag.ExpandToFitWidth = True
Infragistics.Win.Misc.UltraGridBagLayoutManager gridBag =
new Infragistics.Win.Misc.UltraGridBagLayoutManager();
gridBag.ContainerControl = ret;
gridBag.ExpandToFitHeight = true;
gridBag.ExpandToFitWidth = true;
-
ラベルをテンプレートに追加し、レイアウトを管理します 。
ラベルを追加するとエンド ユーザーはどのフィールドを編集しているかを確認できます。2 つのラベルをインスタンス化し、それらをテンプレートの Controls コレクションに追加し、いくつかの美しさに関係するプロパティを設定します。ラベル自体が設定されれば、グリッド バッグ レイアウトでそれらの配置を設定するために、それらの両方で SetGridBagConstraint を呼び出す必要があります。
Dim ultraLabel1 As New Infragistics.Win.Misc.UltraLabel()
ret.Controls.Add(ultraLabel1)
ultraLabel1.Text = "Contact Name"
ultraLabel1.Appearance.TextVAlign = _
Infragistics.Win.VAlign.Middle
gridBag.SetGridBagConstraint(ultraLabel1, _
New Infragistics.Win.Layout.GridBagConstraint(0, 0, 1, 1))
Dim ultraLabel2 As New Infragistics.Win.Misc.UltraLabel()
ret.Controls.Add(ultraLabel2)
ultraLabel2.Text = "Contact Title"
ultraLabel2.Appearance.TextVAlign = _
Infragistics.Win.VAlign.Middle
gridBag.SetGridBagConstraint(ultraLabel2, _
New Infragistics.Win.Layout.GridBagConstraint(0, 1, 1, 1))
Infragistics.Win.Misc.UltraLabel ultraLabel1 = new Infragistics.Win.Misc.UltraLabel();
ret.Controls.Add(ultraLabel1);
ultraLabel1.Text = "Contact Name";
ultraLabel1.Appearance.TextVAlign =
Infragistics.Win.VAlign.Middle;
gridBag.SetGridBagConstraint(
ultraLabel1,
new Infragistics.Win.Layout.GridBagConstraint(0, 0, 1, 1));
Infragistics.Win.Misc.UltraLabel ultraLabel2 = new Infragistics.Win.Misc.UltraLabel();
ret.Controls.Add(ultraLabel2);
ultraLabel2.Text = "Contact Title";
ultraLabel2.Appearance.TextVAlign =
Infragistics.Win.VAlign.Middle;
gridBag.SetGridBagConstraint(
ultraLabel2,
new Infragistics.Win.Layout.GridBagConstraint(0, 1, 1, 1));
-
WinGridCellProxy コントロールをテンプレートに追加します 。
WinGridCellProxy コントロールはユニークなテキストボックスで、関連付けられた WinGridRowEditTemplate コントロール内でしか正しく機能しません。WinGridCellProxy は、適切なデータ バインディングを継承するために WinGridRowEditTemplate の Controls コレクションのメンバでなければなりません。Controls コレクションのメンバとなったら、必要なのは WinGridRowEditTemplate の関連付けられたバンドから表示したい列のキーに ColumnKey プロパティを設定することだけです。
Dim proxy1 as Infragistics.Win.UltraWinGrid.UltraGridCellProxy = _ New Infragistics.Win.UltraWinGrid.UltraGridCellProxy()
proxy1.ColumnKey = "ContactName"
proxy1.Size = New Size(100, 20)
ret.Controls.Add(proxy1)
gridBag.SetGridBagConstraint( _
proxy1, _
New Infragistics.Win.Layout.GridBagConstraint(1, 0, 1, 1))
Infragistics.Win.UltraWinGrid.UltraGridCellProxy proxy1 = new Infragistics.Win.UltraWinGrid.UltraGridCellProxy();
proxy1.ColumnKey = "ContactName";
proxy1.Size = new Size(100, 20);
ret.Controls.Add(proxy1);
gridBag.SetGridBagConstraint(
proxy1,
new Infragistics.Win.Layout.GridBagConstraint(1, 0, 1, 1));
-
バウンド、インボックス テキストボックスをテンプレートに追加します 。
WinGridCellProxy コントロールは WinGridRowEditTemplate に特化して設計されているので、行の編集テンプレートで列データを表示するために標準のインボックス テキストボックスも使用できます。TextBox コントロールは DataBindings オブジェクトを公開し、これによって Add メソッドでデータ バインディングを追加できます。Add メソッドには 7 つのオーバーロードが含まれ、2 番目のオーバーロードを使用します。2 番目のオーバーロードは、3 つのパラメータを受け付けます。
-
列データをバインドしたいテキスト ボックスのプロパティ名。
-
テキスト ボックスがデータを受け取る元のデータ ソース(このケースでは WinGridRowEditTemplate コントロール)。
-
関連付けられたデータ ソースのデータ メンバ(行の編集テンプレートのケースでは、関連付けられたバンドの列のキー)。
Dim text1 As TextBox = New TextBox()
ret.Controls.Add(text1)
text1.DataBindings.Add("Text", ret, "ContactTitle")
gridBag.SetGridBagConstraint( _
text1, _
New Infragistics.Win.Layout.GridBagConstraint(1, 1, 1, 1))
TextBox text1 = new TextBox();
ret.Controls.Add(text1);
text1.DataBindings.Add("Text", ret, "ContactTitle");
gridBag.SetGridBagConstraint(
text1,
new Infragistics.Win.Layout.GridBagConstraint(1, 1, 1, 1));
-
同意およびキャンセル ボタンをテンプレートに追加します 。
必要に応じて、エンド ユーザーはデータを更新して変更をキャンセルする方法が必要です。したがって、同意およびキャンセル ボタンとして動作するテンプレートに 2 つのボタンを追加する必要があります。これを行うには、2 つのボタンをインスタンス化し、イベント ハンドラを追加する必要があり、後でテンプレートの Close メソッドを呼び出し、ボタンに基づき変更を保存またはキャンセルできます。
以下のコード例は 2 つのボタンをインスタンス化し、Click イベントのハンドラを追加し、グリッド バッグのレイアウトにそれらを配置します。
Dim accept As Infragistics.Win.Misc.UltraButton = New Infragistics.Win.Misc.UltraButton()
accept.Text = "OK"
ret.Controls.Add(accept)
AddHandler accept.Click, AddressOf Accept_Click
gridBag.SetGridBagConstraint( _
accept, _
New Infragistics.Win.Layout.GridBagConstraint(0, 2, 1, 1))
Dim cancel As Infragistics.Win.Misc.UltraButton = New Infragistics.Win.Misc.UltraButton()
cancel.Text = "Cancel"
ret.Controls.Add(cancel)
AddHandler cancel.Click, AddressOf Accept_Click
gridBag.SetGridBagConstraint( _
cancel, _
New Infragistics.Win.Layout.GridBagConstraint(1, 2, 1, 1))
Infragistics.Win.Misc.UltraButton accept = new Infragistics.Win.Misc.UltraButton();
accept.Text = "OK";
ret.Controls.Add(accept);
accept.Click += new EventHandler(accept_Click);
gridBag.SetGridBagConstraint(
accept,
new Infragistics.Win.Layout.GridBagConstraint(0, 2, 1, 1));
Infragistics.Win.Misc.UltraButton cancel = new Infragistics.Win.Misc.UltraButton();
cancel.Text = "Cancel";
ret.Controls.Add(cancel);
cancel.Click += new EventHandler(cancel_Click);
gridBag.SetGridBagConstraint(
cancel,
new Infragistics.Win.Layout.GridBagConstraint(1, 2, 1, 1));
-
同意およびキャンセル ボタンの Click イベントを処理します 。
WinGridRowEditTemplate コントロールは、すべての保留中の変更を保存するか変更を破棄するかのいずれかのためにブール パラメータによるオプションをユーザーに与える Close メソッドを公開します。パラメータとして True を渡すと変更は保存され、False を渡すとキャンセルされます。渡すパラメータに関係なく、テンプレートは、Close メソッドの呼び出しの結果として閉じられます。
フォームの Load イベントの後に以下のコードを追加します。
Sub accept_Click(sender As Object, e As EventArgs)
Me.ret.Close(True)
End Sub
Sub cancel_Click(sender As Object, e As EventArgs)
Me.ret.Close(False)
End Sub
void accept_Click(object sender, EventArgs e)
{
this.ret.Close(true);
}
void cancel_Click(object sender, EventArgs e)
{
this.ret.Close(false);
}
アプリケーションを実行すると、Northwind 顧客テーブルに WinGrid がバインドされたことが分かります。各行の左に行編集ボタンが表示されます。行の行編集ボタンをクリックすると、その特定の行の編集テンプレートが表示されます。このテンプレートには両方ともが ContactName および ContactTitle 列 にバインドされた 2 つのテキスト ボックスと 2 つのボタンが含まれており、変更を保存したりキャンセルできます。