2011-01-31 11 views
0

My DataTableがプログラムによって生成され、セルにJobInstance型のオブジェクトが含まれています。複雑なデータオブジェクトを持つDataTableをGridViewにバインドするにはどうすればよいですか?

DataTable dataTable = new DataTable();

// first column - label 
dataTable.Columns.Add("JobType", typeof(string)); 

// other columns (data-driven) 
foreach(string config in Configurations) 
{ 
    DataColumn col = new DataColumn(config, typeof(JobInstance)); // !!! 
    dataTable.Columns.Add(col); 
} 

// rows 
foreach(string jobType in JobTypes) 
{ 
    DataRow row = dataTable.NewRow(); 
    row["JobType"] = jobType; 

    foreach(string config in Configurations) 
    { 
     row[config] = GetJobInstance(jobType, config); // returns a JobInstance object 
    } 

    dataTable.Rows.Add(row);  
} 

私はASPのGridViewには、このデータテーブルをバインドすると、それだけで最初の列を表示します。しかし、列を作成するときに "typeof(Job)"を削除すると、GridViewはセル内のJobInstance.ToString()の結果を表示してすべての列を表示します。しかし、私は基礎となるJobInstanceオブジェクトにアクセスすることはできず、表示されている文字列値だけがあります。

各セルのJobInstance内のフィールドにアクセスして書式設定オプションを決定し、各セルに他のリンクを追加する必要があるため、GridView(たとえばOnRowDataBound)を表示するときにJobInstanceオブジェクトにアクセスする必要があります。

これは可能ですか?

ありがとうございました。

答えて

1

はい、可能です。

JobInstanceの新しいクラスを定義し、フィールドを入れてください。明確にするため、別のファイルにしてください。

あなたのaspxコードビハインドでList<JobInstance>コレクションを定義し、JobInstanceのインスタンスに入力し、このリストを `GridView 'のDataSourceに割り当てます。

List<JobInstance>のインスタンスにアクセスできるようにするには、リストをaspxページのクラスのフィールドメンバーにします。

希望があれば、助けが必要かどうか教えてください。

+0

私はJobInstanceのフィールドを列として表示したくありませんでした。私の列は独立して定義され、各セルはJobInstanceです。しかし、最終的には、行/列を直接与えたデータ構造体のオブジェクトにアクセスしてオブジェクトにアクセスする方法と似たようなことをしました。実際にオブジェクトをグリッドビューに実際にバインドする方法がないように思えました。 – ewerx

関連する問題