Visual C# を使用して DataGrid コントロールをオブジェクトまたは構造体の配列にバインドする
この記事では、オブジェクトの配列を DataGrid コントロールにバインドする方法について説明します。
元の製品バージョン: Visual C#
元の KB 番号: 315786
概要
この記事の例は、オブジェクト プロパティの値を表示する DataGrid コントロールを持つ Windows フォームと、DataGrid コントロールの行を参照するための 4 つのコマンド ボタンで構成されています。
要件
この記事では、次のトピックについて理解していることを前提としています。
- Visual C# プログラミングの概念
- Visual C# .NET
クラスを設計する
コントロールにバインドするクラスには、プロパティ アクセサーが必要です。 バインドするプロパティには、プロパティ メソッドと property Set
Get
メソッドが必要です。 この記事で使用するサンプル クラスには、3 つのメンバーがあります。 この記事では、1 人のメンバーのみが説明されています。 パラメーター化されたコンストラクターも提供されています。 ただし、これは要件ではありません。
public class guitar
{
private string make;
private string model;
private short year;
public guitar()
{
}
public guitar(string make, string model, short year)
{
Make=make;
Model=model;
Year=year;
}
public string Make
{
get
{
return make;
}
set
{
make = value;
}
}
}
配列にクラス インスタンスを追加する
インスタンスを作成して配列に追加するには、次の手順に従います。
配列を宣言します。
クラスのインスタンスを作成し、インスタンスを配列に追加します。
private guitar[] arr=new guitar[3]; arr[0] = new guitar("Gibson", "Les Paul", 1958); arr[1] = new guitar("Fender", "Jazz Bass", 1964); arr[2] = new guitar("Guild", "Bluesbird", 1971);
配列を DataGrid コントロールにバインドする
配列が設定されたら、DataGrid コントロールの DataSource プロパティを配列に設定します。 DataGrid コントロールの列は、スコープ内のプロパティ アクセサーが存在するプロパティに基づいて設定されます。
dataGrid1.DataSource=arr;
配列を参照する手段を指定する
を使用 CurrencyManager
して配列を参照できます。 これを行うには、コントロールの の BindingContext
配列 (この場合は 配列) に関連付けますCurrencyManager
。
private CurrencyManager currencyManager=null;
currencyManager = (CurrencyManager)dataGrid1.BindingContext[arr];
CurrencyManager
クラスには、配列のPosition
メンバーを反復処理するために操作できるプロパティがあります。 の現在の Position
値を に追加するか、 から減算することで、コントロールの行を DataGrid
参照できます。
//Move forward one element.
currencyManager.Position++;
//Move back one element.
currencyManager.Position--;
//Move to the beginning.
currencyManager.Position = 0;
//Move to the end.
currencyManager.Position = arr.Length - 1;
ステップ バイ ステップの例
Visual C# .NET で、新しい Windows アプリケーション プロジェクトを作成します。 Form1 は既定で作成されます。
プロジェクトにクラスを追加します。
Class1.csのコードを次のコードに置き換えます。
public class guitar { private string make; private string model; private short year; public guitar() { } public guitar(string Make, string Model, short Year) { make=Make; model=Model; year=Year; } public string Make { get { return make; } set { make = value; } } public string Model { get { return model; } set { model = value; } } public short Year { get { return year; } set { year = value; } } }
Class1.cs コード ウィンドウを閉じ、フォーム Designerに切り替えます。
DataGrid コントロールを Form1 に追加します。 DataGrid コントロールのサイズは、4 列と 3 行に対応します。
Form1 に 4 つのボタン コントロールを追加し、ボタンを水平方向に配置します。
Button1 の Text プロパティを [次へ] に変更します。
Button2 の Text プロパティを [前へ] に変更します。
Button3 の Text プロパティを First に変更 します。
Button4 の Text プロパティを Last に変更 します。
Form1
クラスに以下のコードを追加します。private guitar[] arr=new guitar[3]; private CurrencyManager currencyManager=null;
[フォーム] Designerに切り替え、フォームを右クリックし、[プロパティ] をクリックします。
[ イベント ] アイコンをクリックし、ロード イベントをダブルクリックして、コードにイベントを
Form1_Load
追加します。イベントに次のコードを
Form1_Load
追加します。arr[0] = new guitar("Gibson", "Les Paul", 1958); arr[1] = new guitar("Fender", "Jazz Bass", 1964); arr[2] = new guitar("Guild", "Bluesbird", 1971); currencyManager = (CurrencyManager)dataGrid1.BindingContext[arr]; dataGrid1.DataSource=arr;
[フォーム] Designerを表示するように切り替えます。
[次へ] をダブルクリックし、次のコードをイベントに
button1_Click
追加します。currencyManager.Position++;
[ 前へ] をダブルクリックし、次のコードをイベントに
button2_Click
追加します。currencyManager.Position--;
[最初] をダブルクリックし、次のコードをイベントに
button3_Click
追加します。currencyManager.Position = 0;
[最後] をダブルクリックし、次のコードをイベントに
button4_Click
追加します。currencyManager.Position = arr.Length - 1;
プロジェクトをビルドして実行します。
コマンド ボタンをクリックして、DataGrid コントロールの行間を移動します。
注:
必要に応じて、オブジェクトの値を編集できます。
クラスの代わりに構造体を使用する
構造体をバインドするための規則は、オブジェクトをバインドするための規則と同じです。 メンバー アクセサーであるプロパティが必要です。 この目的で作成される構造体は、クラスに似ています。
構造体の配列にバインドするには、次の手順に従います。
例の Class1.cs クラス モジュールの定義を から変更します。
public class guitar
を次の例に示します。
public struct guitar
次のように、既定のコンストラクターをコメントアウトします。
//public guitar() //{ //}
サンプル プログラムをもう一度ビルドして実行し、構造体の配列で機能することを確認します。
関連情報
詳細については、Visual Studio .NET Online ヘルプの「Windows フォームデータのコンシューマー」トピックを参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示