多くのプロジェクトでは、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 にバインドするためのメカニズムも示しています。