TÍTULO DO GRIDVIEW COM ATRIBUTO DA PROPRIEDADE

RXGOMES 24/03/2016 16:07:11
#459839
boa tarde

estou populando um datagrid com list, conforme código abaixo
  dados.DataSource = new List<Library.Class.Factor>(new Library.Class.Factor().GetAll());
dgvFactor.DataSource = dados;
dgvFactor.DataBind();


a classe está da seguinte forma
  
public partial class Factor : Backwork<Factor>
{
[Key]
[DisplayName([Ô]Cód[Ô])]
[DataObjectField(true, true)]
[Column([Ô]fctrId[Ô])]
public int Id { get; set; }


[DataObjectField(false, false)]
[Column([Ô]fctrTitle[Ô])]
[DisplayName([Ô]Descriçao[Ô])]
public string Title { get; set; }


porém o título da coluna está sendo exibido com o nome a propriedade e nome com o atributo (displayname).

Gostaria de ajuda para identificar o que estou fazendo e errado.

Grato
KERPLUNK 24/03/2016 16:23:41
#459840
A segunda linha [Ô]dgvFactor.DataSource = dados;[Ô], não é necessária, você já está passando os dados para o datagridview na primeira...
RXGOMES 24/03/2016 16:35:32
#459844
Boa tarde Kerplunk,

Obrigado pela agilidade na resposta

na linha
Citação:

dados.DataSource = new List<Library.Class.Factor>(new Library.Class.Factor().GetAll());

, [Ô]dados[Ô] é um BindingSource, e não a grid, assim a linha [Ô]dgvFactor.DataSource = dados;[Ô] tem necessidade.

Também realizei um teste em winform e funcionou perfeitamente, porém em webform estou tendo esta dificuldade.
KERPLUNK 24/03/2016 16:39:27
#459847
é uma aplicação Web e não Windows forms?
RXGOMES 24/03/2016 16:39:58
#459848
Sim é uma aplicação web
KERPLUNK 24/03/2016 18:03:40
#459855
A principal diferença entre aplicações Web e Desktop é o tipo de dados que trafega. Em uma aplicação Desktop, o acesso é binário, ou seja, temos acesso total às classes utilizadas, incluindo para Reflection, que é o que acontece quando colocamos essas decorações nas classes e propriedades. Já na aplicação Web, o que circula são dados em formato de texto(seja em formato XML ou JSON). Por essa razão, o que a aplicação Web recebe são os dados apenas, com a estrutura normal da classe, mas não dados binários das classes. Por isso para aplicações Web precisam de funções auxiliares para poder ter esses dados disponíveis.
RXGOMES 24/03/2016 18:35:37
#459857
Boa noite Kerplunk

Estou vendo agora seu post, pois estava trabalhando na solução e foi exatamente isto que eu tive que fazer, usar funções auxiliares para obter o resultado esperado.

Segue a solução

  
protected void dgvFactor_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
for (int i = 0; i < e.Row.Cells.Count; i++)
{
e.Row.Cells[i].Text = GetDisplayName(e.Row.Cells[i].Text);
}
}
}

protected string GetDisplayName(string headerText)
{
string newHeader = string.Empty;

foreach (PropertyInfo item in typeof(Library.Class.Factor).GetProperties().ToList().Where(p => p.GetCustomAttribute(typeof(DisplayNameAttribute)) != null))
{
if (item.Name == headerText)
{
newHeader = ((DisplayNameAttribute)item.GetCustomAttribute(typeof(DisplayNameAttribute))).DisplayName;
break;
}
}

return newHeader;


Muito obrigado pela sua ajuda.

PS. Estou gostando e aprendendo muito com seus vídeos. Você tem um método de explicar muito direto e simples.
KERPLUNK 24/03/2016 19:06:36
#459859
Fico contente de poder ajudar! E obrigado por assistir os vídeos!
KERPLUNK 24/03/2016 19:11:58
#459860
Apesar de eu não sugerir o uso de WebForms e preferir muito mais aplicações HTML puro, já que está fazendo uso de uma WebAPI. Recomendo e muito o uso de algum framework(UI) pronta para aplicações Web como o JEasyUI. Apesar de não ser gratuito, o preço é bem módico e pode ser repassado para os clientes, diluídos em vários clientes, já que a licença permite a distribuição para vários clientes. Os controles deles são muito simples de serem usados e muito dinâmicos, até mesmo mais que vários outros frameworks mais caros.
Faça seu login para responder