2015-10-07 1 views
0

Я использую GridView, как этотReference поле из класса не создает столбец

<asp:GridView CssClass="table table-striped table-bordered table-condensed" 
      ID="gvDatos" runat="server" DataKeyNames="IdIngrediente" AllowPaging="True" PageSize="4" 
      onselectedindexchanged="GridView_SelectedIndexChanged" onrowcreated="gvDatos_RowCreated" onpageindexchanging="gvDatos_PageIndexChanging"> 

Это код, который связывает данные

List<Ingrediente> listaIngredientes = GestorABMCIngredientes.BuscarPorNombre(txtIngBuscar.Text); 
gvDatos.DataSource = listaIngredientes; 
string[] claves = { "IdIngrediente"}; 
gvDatos.DataKeyNames = claves; 
gvDatos.DataBind(); 

И мой класс Ingrediente

public class Ingrediente 
{ 
    public int IdIngrediente { get; set; } 
    public string Nombre { get; set; } 
    public UnidadMedida unidadMedida { get; set; } 
    public int stock { get; set; } 
    public double costoUnitario { get; set; } 
    public bool requiereFrio { get; set; } 
} 

Все поля Ingrediente генерируют столбцы должным образом, за исключением unidadMedida, тот, который не относится к типу i nt, string, double, bool и т. д.

Мне тоже хотелось бы получить столбец для этого поля с помощью метода ToString() объекта (или любого свойства класса UnidadMedida, я обойдусь).

Я думал о создании нового класса IngredienteForGridView, который имеет строковое поле вместо типа UnidadMedida, но я бы предпочел избежать этого, если смогу.

Снимок экрана, как отображается мой GridView. Обратите внимание, что я изменил текст заголовка столбца, и я скрыл идентификатор columnd (это единственная колонка, которую я скрываю, и эта проблема существовала еще до того, как я применил скрытие столбцов) enter image description here Отсутствует колонка unidadMedida (из row.cells count Я выводил, что он не сгенерирован)

+0

Созданы ли ваши столбцы? – Bharadwaj

+0

Да, они автогенерируются – Blueriver

ответ

1

Как насчет добавления поля шаблона для этого столбца в разметке?

<asp:GridView ...> 
    <Columns> 
     <TemplateField HeaderText="Blah"> 
      <%# ((UnidadMedida)Eval("unidadMedida")).YourMethodHere() %> 
     </TemplateField> 
    </Columns> 
</asp:GridView> 

Стоит отметить, что при таком подходе некоторых столбцы являются автогенерируемыми и некоторыми столбцы обычно определены, вы не сможете контролировать порядок, в котором они появляются. Пользовательские столбцы всегда будут первыми.

Если это не тот заказ, который вам нужен, то лучше всего указать все столбцы, которые у вас есть на заказ. Да, немного больше работы, но тогда вы можете избавиться от скрытых хаков, и у вас также будет больше контроля над внешним видом сетки. К счастью, нет необходимости определять шаблоны для большинства из них:

<Columns> 
    <BoudField DataField="Nombre" HeaderText="Nombre" /> 
    <TemplateField HeaderText="Blah"> 
     <%# ((UnidadMedida)Eval("unidadMedida")).YourMethodHere() %> 
    </TemplateField> 
    <BoudField DataField="costoUnitario" HeaderText="Costo Unitario"/> 
</Columns> 
+0

Звучит неплохо. Есть ли способ сделать это в коде? Не то, чтобы я строго нуждался в нем, но так как мы изучаем новые вещи ... :). Я сделаю это через минуту и ​​посмотрю, как это происходит – Blueriver

+0

@Blueriver, что делать? Определить пользовательские столбцы? Да, это может быть сделано в коде позади, но это очень, очень плохая практика, потому что это займет гораздо больше кода и намного больше обслуживания, чем объявление в aspx. Я настоятельно советю не делать этого – Andrei

+0

У меня наконец-то есть время, чтобы попробовать (много чего происходит ...), и я могу заставить его работать. Большое спасибо! Я отредактирую ваш ответ немного, если вы не против, небольшие изменения для его компиляции. Еще раз спасибо <3 – Blueriver

Смежные вопросы