GridWebを使用してカスタマイズされたコレクションオブジェクトにワークシートをバインドする
カスタムコレクションとワークシートのバインディング
この機能を示すために、この記事では、手順を踏んでサンプルアプリケーションの作成方法について説明します。まず、カスタムコレクションを作成し、そのコレクションをワークシートとバインドする方法を説明します。
ステップ1: カスタムレコードの作成
カスタムコレクションを作成する前に、コレクションに格納されるカスタムレコードを保持するクラスを作成します。この記事の目的は、独自のカスタムコレクションを作成し、それをGridWebにバインドする方法を示すことなので、独自のカスタムレコードの作成方法は自由です。
以下の例では、MyCustomRecordクラスを使用して、5つのプライベートフィールドと5つの公開プロパティを持つカスタムレコードを示しています。プロパティの構造は次のとおりです:
- StringField1(string)を読み書きするためのStringField1プロパティ。
- StringField2(string)を読む専用のReadonlyField2プロパティ。
- DateField1プロパティを使用してdatefield1 (DateTime) を読み書きします。
- IntField1プロパティを使用してintfield1 (整数) を読み書きします。
- DoubleField1プロパティを使用してdoublefield1 (倍精度浮動小数点数) を読み書きします。
C#
//Creating a class that will act as record for the custom collection
public class MyCustomRecord
{
//Private data members
private string stringfield1;
private string stringfield2 = "ABC";
private DateTime datefield1;
private int intfield1;
private double doublefield1;
//Creating a string property
public string StringField1
{
get { return stringfield1; }
set { stringfield1 = value; }
}
//Creating a readonly string property
public string ReadonlyField2
{
get { return stringfield2; }
}
//Creating a DateTime property
public DateTime DateField1
{
get { return datefield1; }
set { datefield1 = value; }
}
//Creating an int property
public int IntField1
{
get { return intfield1; }
set { intfield1 = value; }
}
//Creating a double property
public double DoubleField1
{
get { return doublefield1; }
set { doublefield1 = value; }
}
}
ステップ2: カスタムコレクションの作成
次に、顧客レコードを追加してアクセスするためのカスタムコレクションを作成します。 簡単にするために、この例では読み取り専用インデクサーを含むMyCollectionクラスを使用しています。 このインデクサーを使用すると、コレクションに格納されている任意のカスタムレコードを取得できます。
C#
//Creating a custom collection
public class MyCollection : CollectionBase
{
//Leaving the collection constructor empty
public MyCollection()
{
}
//Creating a readonly property for custom collection. This Item property is used by GridWeb control to
//determine the collection's type
public MyCustomRecord this[int index]
{
get { return (MyCustomRecord)this.List[index]; }
}
}
ステップ3: ワークシートとカスタムコレクションのバインディング
カスタムコレクションの作成プロセスは完了しました。 今度は、Aspose.Cells.GridWebのワークシートにバインドするためにカスタムコレクションを使用します。 まず、Webフォームを作成し、その中にGridWebコントロールを追加して、いくつかのコードを追加します。
バインディングにカスタムコレクションを使用するには、まずMyCollectionクラスのオブジェクト(上記の手順で作成)を作成します。 次に、MyCollectionオブジェクトにMyCustomRecordオブジェクトを作成して追加します。
最後に、MyCollectionオブジェクトをワークシートのデータソースとして設定し、ワークシートをコレクションとバインドします。 この時点では、ワークシートのバウンド列に対して検証ルールを作成することもできます。
C#
//Implementing Page_Load event handler
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false && this.GridWeb1.IsPostBack == false)
{
//Creating an object of custom collection
MyCollection list = new MyCollection();
//Creating an instance of Random class
System.Random rand = new System.Random();
//Creating a loop that will run 5 times
for (int i = 0; i < 5; i++)
{
//Creating an object of Custom Record
MyCustomRecord rec = new MyCustomRecord();
//Initializing all properties of Custom Record
rec.DateField1 = DateTime.Now;
rec.DoubleField1 = rand.NextDouble() * 10;
rec.IntField1 = rand.Next(20);
rec.StringField1 = "ABC_" + i;
//Adding Custom Record to Collection
((IList)list).Add(rec);
}
//Accessing a desired worksheet
GridWorksheet sheet = GridWeb1.WorkSheets[0];
//Setting the Data Source of worksheet
sheet.DataSource = list;
//Creating columns automatically
sheet.CreateAutoGenratedColumns();
//Setting the validation type of value to DateTime
sheet.BindColumns[2].Validation.ValidationType = ValidationType.DateTime;
//Binding worksheet
sheet.DataBind();
//Assigning an event handler to InitializeNewBindRow event of the worksheet
//sheet.InitializeNewBindRow += new InitializeNewBindRowHandler(GridWeb1_InitializeNewBindRow);
}
}
ステップ4: ワークシートのInitializeNewBindRowイベントの処理
上記のコードでは、ワークシートのInitializeNewBindRowにGridWeb1_InitializeNewBindRowイベントハンドラーを割り当てるために使用される追加のコード行があるのに気づいたかもしれません。 このイベントは、ワークシートに新しいバウンド行が追加されるたびにトリガーされます。 このイベントのためにイベントハンドラーを作成したのは、MyCustomRecordオブジェクトのDateField1プロパティのためです。
Aspose.Cells.GridWebは、新しいバウンド行がGridWebコントロールに追加されるたびにintおよびdouble値を自動的に**ゼロ (0)**で初期化します。 日付の場合は、GridWebコントロールがシステムから現在の日付を自動的に追加するようにします。 そのために、InitializeNewBindRowイベントのGridWeb1_InitializeNewBindRowイベントハンドラーを作成しました。
GridWebを使用してバインドオブジェクト引数からMyCustomRecordクラスの特定のインスタンスにアクセスし、そのDateField1プロパティに現在のシステム日付を割り当てます。
C#
//Creating GridWeb1_InitializeNewBindRow event handler
private void GridWeb1_InitializeNewBindRow(GridWorksheet sender, object bindObject)
{
//Accessing that custom record object that is newly bound
MyCustomRecord rec = (MyCustomRecord)bindObject;
//Initializing the DateTime of a property when a new row gets bound to the database
rec.DateField1 = DateTime.Now;
}
ステップ5: アプリケーションの実行
アプリケーションをCtrl+F5を押すか、VS.NETのStartボタンをクリックして実行します。 Webフォームが新しいブラウザウィンドウで開きます。
カスタムコレクションにバインドしたワークシート
GridWebコントロールを右クリックして、レコードを追加したり削除したりします。 例えば、Add Rowオプションを選択してワークシートに新しいレコードを追加します。
メニューからAdd Rowオプションを選択
ワークシートに新しい行が追加されると、セルには現在のシステム日付を含めたデフォルトデータが含まれます。
デフォルトデータがある新しい行がワークシートに追加されました
データを変更した後、保存または送信をクリックして変更内容を保存します。
Saveボタンをクリックして変更を保存