Usuário com melhor resposta
pegar valor node selecionado no treeview

Pergunta
-
ola bom dia tenho o seguinte codigo para carregar meu treeview.
private void preenchetreeview(DataTable dt)
{
//carrego o pai d etodos
TreeNode node = new TreeNode("Menus", "", "image/xpDesktop.gif", "", "");
TreeView1.Nodes.Clear();
TreeView1.Nodes.Add(node);//insere na base da tree
node.ExpandAll();
try
{
//carrego menus principais
foreach (DataRow dr in dt.Rows)
{
TreeNode node1 = new TreeNode(Convert.ToString(dr["nome"]), Convert.ToString(dr["id"]), "image/Folder.gif", "", "");
node1.ExpandAll();
TreeView1.Nodes[0].ChildNodes.Add(node1);
DataTable dtsub = new DataTable();
//carrego todos filhos de cada node pai
dtsub = CarregaSubmenus(Convert.ToInt32(dr["id"]));
foreach (DataRow dr1 in dtsub.Rows)
{
// TreeView1.Nodes[0].ChildNodes[0].Expanded = true;
TreeNode nodesub = new TreeNode(Convert.ToString(dr1["nomesubmenu"]), Convert.ToString(dr1["idmenu"]), "image/BookY.gif", "", "");
//Modificação para pegar a posição do node
int indexNodeParent = TreeView1.Nodes[0].ChildNodes.IndexOf(node1);
TreeView1.Nodes[0].ChildNodes[indexNodeParent].ChildNodes.Add(nodesub); //carrego os filhos
}
}
}
catch (Exception ex)
{
throw new Exception ("Erro ao Carregar o Controle!" + ex.Message);
}
}===
neste evento pego o valor do node selecionado
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
valor = TreeView1.SelectedValue;
}ate ai funfa mas quando clico no botao gravar que uso gravar o sub menu a varialvel vem null
alguem pode me ajudar.
code do meu botao gravar
try
{
if (CheckBox1.Checked == true)
{
Grava_Submenus(Convert.ToInt32(valor));
}
else
{
if (txtmenu.Text.Trim() == string.Empty)
{
lblvalfild.Text = "* Campo Obrigatorio";
lblvalfild.Visible = true;
}
else
{
OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("./app_data/image.accdb"));
string sql = "INSERT INTO menus (nome,data_criacao)values(@nome,@data)";
OleDbCommand cmd = new OleDbCommand(sql, conexao);
cmd.Parameters.AddWithValue("@nome", txtmenu.Text.ToUpper());
cmd.Parameters.AddWithValue("@data", txtdata.Text);
conexao.Open();
cmd.ExecuteNonQuery();
Label2.Text = "Dados Gravados com Sucesso";
txtmenu.Text = string.Empty;
txtdata.Text = string.Empty;
}
}
}
catch (Exception ex)
{
throw new Exception("Falha ao Gravar o Menu" + ex.Message);
}tentei direto assim
TreeView1.SelectedValue sem passar para variavel mas mesmo problema.
Respostas
-
Amigo,são formas de perssitir os dados, veja os links sobre:
http://www.macoratti.net/09/03/aspn_chg.htm
http://www.devmedia.com.br/post-19457-ASP-NET--Persistencia-de-Estado.html
Olavo Oliveira Neto
http://olavooneto.wordpress.com
Se for útil marque como resposta e faça um Developer feliz :)- Marcado como Resposta Alexandre Carvalho Marques sexta-feira, 22 de julho de 2011 11:07
Todas as Respostas
-
Não entendi o problema o valor ta vindo nulo? a váriavel "valor" está definida aonde ? ela é global para a página toda ? e você quer que o valor seja persistido depois de recuperado ? se for isso você terá de mudar sua abordagem para armazenar ou na viewState ou em sessão(session) http://www.codigofonte.net/dicas/csharp/80_trabalhando-com-session-em-c para perssitir essa váriavel e consegui retorna-la em outro método.
Olavo Oliveira Neto
http://olavooneto.wordpress.com
Se for útil marque como resposta e faça um Developer feliz :) -
apenas declarei antes Page_Load
assim
public partial class _Default : System.Web.UI.Page
{
string valor;o que seria melhor session ou viewstate
como seria com ViewState faço isso dentro deste evento
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
valor = TreeView1.SelectedValue;
} -
faça com ViewState, veja um exemplo do link http://msdn.microsoft.com/en-us/library/ms972976.aspx
public string NavigateUrl { get { string text = (string) ViewState["NavigateUrl"]; if (text != null) return text; else return string.Empty; } set { ViewState["NavigateUrl"] = value; } }
para seu caso:
<pre lang="x-c#">if (CheckBox1.Checked == true) { Grava_Submenus(Convert.ToInt32(ViewState["NodeIdValue"])); }
= TreeView1.SelectedValue;
Para retornar o valor:
Olavo Oliveira Neto
http://olavooneto.wordpress.com
Se for útil marque como resposta e faça um Developer feliz :) -
ok mas onde carrego o viewstate
posso fazer isto
viewstate["NodeIdValue"]=TreeView1.SelectedValue;
depois mando pro
if (CheckBox1.Checked == true) { Grava_Submenus(Convert.ToInt32(ViewState["NodeIdValue"])); }
assim funciona ou não nao entendi muito bem a logica do viewstate é como uma session. -
Amigo,são formas de perssitir os dados, veja os links sobre:
http://www.macoratti.net/09/03/aspn_chg.htm
http://www.devmedia.com.br/post-19457-ASP-NET--Persistencia-de-Estado.html
Olavo Oliveira Neto
http://olavooneto.wordpress.com
Se for útil marque como resposta e faça um Developer feliz :)- Marcado como Resposta Alexandre Carvalho Marques sexta-feira, 22 de julho de 2011 11:07