Прежде всего позвольте мне сказать, что я видел подобные вопросы в StackOverflow, но ни один из них, который я видел, не имеет особого отношения к автогенерированным столбцам.Изменить порядок asp: GridView * autogenerated * columns
У меня есть 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, при этом все еще будет удобнее автогенерировать все остальные столбцы?
Я думаю, что вызов SetGridView слишком велик в жизненном цикле страницы (viewstate + control tree). Может быть, вам стоит изучить это. – CharlesAD
Я не думаю, что это было бы так, поскольку созданные столбцы создавались только тогда, когда данные доступны, и добавление связанных полей действительно работает, но это просто не позволяет процессу автогенерации генерировать одни и те же столбцы во второй раз. Я не понимаю, что вы имеете в виду? – hatch22
Вы пытались изменить свой запрос в том порядке, в котором должны появляться столбцы? – Zerkey