多くのプロジェクトでは、WinGrid を用いてソートされた結果と標準 TextBoxes をナビゲートしてデータを編集します。この操作がうまくいくようにするには、DataSources と Grid Rows 間に既知の関係がなければなりません。
UltraGridRow の Index プロパティがバインドされた DataTable で行の位置を直接指すので、フラット データにとってこれはたいした問題ではありません。
ユーザーが UltraWinGrid の行を選択するとき、どのように DataTable 行をテキストボックスにバインドし、DataTable 内の位置を変更したらよいですか?
このサンプル プロジェクトでは、ユーザーが UltraGrid の行を選択し、TextBoxes の対応するデータを表示できます。
フォーム イベント領域には以下のイベント ハンドラがあります。
MyBase.Load - Form Load イベント コードと Order Details テーブルの列はテキストボックス コントロールにバインドされます。
Visual Basic の場合:
Private Sub DataSourcesandWinGridRows_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Me.txtShipAddress.DataBindings.Add("Text", Me.nWindDataSet3.Orders, "ShipAddress") Me.txtShipCity.DataBindings.Add("Text", Me.nWindDataSet3.Orders, "ShipCity") Me.txtShipName.DataBindings.Add("Text", Me.nWindDataSet3.Orders, "ShipName") End Sub
C# の場合:
private void DataSourcesandWinGridRows_Load(object sender, System.EventArgs e) { this.txtShipAddress.DataBindings.Add("Text", this.nWindDataSet3.Orders, "ShipAddress"); this.txtShipCity.DataBindings.Add("Text", this.nWindDataSet3.Orders, "ShipCity"); this.txtShipName.DataBindings.Add("Text", this.nWindDataSet3.Orders, "ShipName"); }
UltraGrid イベント領域には以下のイベント ハンドラがあります。
UltraGrid1.InitializeLayout - InitializeLayout イベント ハンドラは Row Select Type プロパティと Cell Click Action プロパティを設定します。
Visual Basic の場合:
Imports Infragistics.Win.UltraWinGrid ... Private Sub UltraGrid1_InitializeLayout(ByVal sender As Object, _ ByVal e As Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs) _ Handles UltraGrid1.InitializeLayout e.Layout.Override.SelectTypeRow = SelectType.Single e.Layout.Override.CellClickAction = CellClickAction.RowSelect End Sub
C# の場合:
using Infragistics.Win.UltraWinGrid; ... private void ultraGrid1_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e) { e.Layout.Override.SelectTypeRow = SelectType.Single; e.Layout.Override.CellClickAction = CellClickAction.RowSelect; }
UltraGrid1.AfterSelectChange - グリッドの選択行を変更するたびに AfterSelectChange イベントが発生します。
選択のため、CurrencyManager が Selected.Rows(0).Index により直接呼び出され、TextBoxes に置くことができます。
Visual Basic の場合:
Private Sub UltraGrid1_AfterSelectChange(ByVal sender As Object, _ ByVal e As Infragistics.Win.UltraWinGrid.AfterSelectChangeEventArgs) _ Handles UltraGrid1.AfterSelectChange ' CurrencyManager を使用して位置を設定します Dim currencymanager1 As CurrencyManager currencymanager1 = Me.BindingContext(Me.nWindDataSet3.Orders) currencymanager1.Position = Me.UltraGrid1.Selected.Rows(0).Index End Sub
C# の場合:
private void ultraGrid1_AfterSelectChange(object sender, Infragistics.Win.UltraWinGrid.AfterSelectChangeEventArgs e) { // CurrencyManager を使用して位置を設定します CurrencyManager currencyManager1; currencyManager1 = (CurrencyManager)this.BindingContext[this.nWindDataSet3.Orders]; currencyManager1.Position = this.ultraGrid1.Selected.Rows[0].Index; }
このプロジェクトは UltraGrid 行インデックスと基本の DataTable 行の関係を示す興味深いプロジェクトです。このプロジェクトでは、VB.NET で使用される DataTable 列を TextBoxes にバインドするためのメカニズムも示しています。