首先让我说我在 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 时,我想自动生成列,因为有大量不同的字段。但是,我想首先显示共享基类中的列。如果我只是将 分配IEnumerable<Data>
给 GridView 数据源,则基类属性将最后添加到 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 列的开头,同时仍然可以方便地自动生成所有其他列?