最初に、StackOverflow で同様の質問を見たことがありますが、特に自動生成された列を扱っているものはありませんでした。
にasp:GridView
バインドしているがありIEnumerable<Data>
、Data
実行時の入力によって異なる場合があります。ただし、各Data
クラスはいくつかの基本プロパティを共有します。
public class BaseData
{
public int ID { get; set; }
public string Name { get; set; }
}
public class AddressData : BaseData
{
public string Street1 { get; set; }
public string Street2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; };
}
public class ContactData : BaseData
{
public string Phone { get; set; }
public DateTime LastUpdated { get; set; }
// tons more public properties...
}
// More classes with lots of different public properties...
これらのさまざまなクラスはデータベース クエリによって設定されるため、さまざまなフィールドが多数あるため、データを GridView に配置するときに列を自動生成したいと考えています。ただし、最初に共有基本クラスにある列を表示したいと思います。を GridView データソースに割り当てるIEnumerable<Data>
と、基本クラスのプロパティが最後に GridView の列に追加されます。私はこのような状況を改善しようとしました:
// Callback after getting data from database
public void SetGridView<Data>(IEnumerable<Data> rows) where Data : BaseData
{
// Make sure these columns show up first
BoundField ID = new BoundField() { HeaderText = "ID", DataField = "ID" };
BoundField Name = new BoundField() { HeaderText = "Name", DataField = "Name" };
myGridView.Columns.Clear();
myGridView.Columns.Add(ID);
myGridView.Columns.Add(Name);
myGridView.AutoGenerateColumns = true;
myGridView.DataSource = rows;
myGridView.DataBind();
}
ただし、これは最初と最後の列を複製するだけなので、ヘッダーは次のようになります。
ID Name Street1 Street2 City State ZipCode ID Name
他のすべての列を自動生成する便利さを保ちながら、存在することがわかっている列 (基本クラス) を GridView の列の先頭に移動する方法はありますか?