Array
(
)

Menu dinâmico na Master Page

Otilia Schall
|
MVP
    04 fev 2014

Quero colocar em uma das opções de menu, submenus onde os itens estão em uma tabela do banco de dados.
A rotina para criar a lista com os registros está ok.
O que não sei é como montar o código na Master Page.
No site.master coloquei:
<asp:ListView ID="lvMenu" runat="server">
<ItemTemplate>
<li><a href="Produtos.aspx?id=<%#DataBinder.Eval(Container.DataItem, "key_tsite_submenu_produtos")%>">
<img src="../App_Themes/site/images/menuAmarelo.gif" alt="" style="padding: 3px 5px 0 0" /><%#DataBinder.Eval(Container.DataItem, "nom_submenu")%></a></li>
</ItemTemplate>
</asp:ListView>
Na página site.master.cs coloquei:
if (!Page.IsPostBack)
{
MenuProdutos();
}

}
public void MenuProdutos()
{
SubmenuDAL menu = new SubmenuDAL();
ListView lvMenu = (ListView)this.Master.FindControl("LvMenu");
lvMenu.DataSource = menu.ListaAllSubmenu();
lvMenu.DataBind();
Não dá erro de compilação, mas quando vou executar dá o ero
System.NullReferenceException: Object reference not set to an instance of an object. na linha lvMenu.DataSource = menu.ListaAllSubmenu();

Aguém pode informar-me como faço?
Obrigada

Chiodini
   - 04 fev 2014

Boa tarde,

Se voce puder colocar a estrutura do metodo LisAll li
vai ajudar, pois pode estar dando erro dentro deste metodo,
porem como nao esta tratado estoura na linha de chamada.

att,

Otilia Schall
|
MVP
    04 fev 2014

A estrutura é:

public List<SubmenuModel> ListaAllSubmenu()
{
List<SubmenuModel> lista = new List<SubmenuModel>();
SqlDataReader dr = DB.ExecuteReader(DB.ConnectionStringSQL, CommandType.Text, "SELECT key_tsite_submenu_produtos, nom_submenu FROM TSITE_SUBMENU_PRODUTOS WHERE tag_exibir = 1 order by num_ordem");

while (dr.Read())
{
SubmenuModel sm = new SubmenuModel(Convert.ToInt32(dr["key_tsite_submenu_produtos"]), dr["nom_submenu"].ToString());
lista.Add(sm);
}
return lista;
}

O select retorna 7 registros
1 Teste e Medição
2 Teste de Componentes
3 Análise de Gases
4 Sistemas de Monitoração
5 Soldagem Dessoldagem SMD e BGA
6 Metrologia Dimensional
7 Sensores

Chiodini
   - 04 fev 2014

Depura e ve se em algum momento
este comando

SubmenuModel(Convert.ToInt32(dr["key_tsite_submenu_produtos"]), dr["nom_submenu"].ToString());

Não recebe parametros nulos.

Otilia Schall
|
MVP
    04 fev 2014

Não recebe.
Mostra todos os 5 registros.

Acho q o código que está na Master Page é que está errado.

Mas já pesquisei em vários fóruns e não encontro o q preciso.

Chiodini
   - 04 fev 2014

opa...

entao é os dados que voce esta colocando no datasource,
que ele esta convertendo de uma maneira incorreta.

Pois o erro é que a referencia do objeto esta nula
ou seja nao existe.

att,

Otilia Schall
|
MVP
    04 fev 2014

E vc pode informar-me com faço?

Otilia Schall
|
MVP
    04 fev 2014

Consegui assim na site.master.cs

public void MenuProdutos()
{

SubmenuDAL menu = new SubmenuDAL();
ListView LvMenu = (ListView)this.Master.FindControl("ContentPlaceTopo").FindControl("lvMenu");

LvMenu.DataSource = menu.ListaAllSubmenu();
LvMenu.DataBind();
}

Obrigada pela ajuda Leandro.