none
Ayuda con Checkboxes de TreeView RRS feed

  • Pregunta

  • Hola compañerxs,necesito ayuda para lo que respecta en TreeView. Tengo con TreeView en Checkbox (TvChk), un TreeView normal (TvB), y un checkbox llamado Administrador (chkAdm), al hacer check en éste, todos los check de TvChk se chequean automaticamente, y a la vez se muestran en TvB sin checks. Hasta ahí todo bien.

    Lo que necesito es que, supongamos, tengo 3 treeviewcheck padres, cada uno con 2 hijos. Si hago check en un padre, sólo ése junto a los hijos deben mostrarse en el otro TreeView (TvB), y si hago check en un hijo, sólo éste y el padre deben mostrarse, y así sea con dos hijos. Y así también con los demás padres. Todo eso mostrarse en el TvB.

    Les mostraré el código:

    Método:

       private static void SetChildrenChecked(TreeNode treeNode, bool checkedState)
    {

    foreach (TreeNode item in treeNode.Nodes)
    {
    if (item.Checked != checkedState)
    {
    item.Checked = checkedState;

    }

    }

    }



    La propiedad AfterCheck de TvChk
      private void TvChk_AfterCheck(object sender, TreeViewEventArgs e)
    {

    SetChildrenChecked(e.Node, e.Node.Checked);

    if (e.Node.Parent != null)
    {

    bool setParentChecked = true;
    foreach (TreeNode node in e.Node.Parent.Nodes)
    {
    if (node.Checked != e.Node.Checked)
    {
    setParentChecked = false;

    break;
    }
    else {

    }


    }

    if (setParentChecked)
    {
    if (chkAdm.Checked == true)
    {
    e.Node.Parent.Checked = e.Node.Checked;


    }

    }



    }


    }
    Y este es del método del chkAdm, mi TreeView está desde una BD, que tiene modulo (nodo padre), y cabecera (nodo hijo)
     private void chkAdm_CheckedChanged(object sender, EventArgs e)
    {

    foreach (TreeNode node in tvempresa.Nodes)
    node.Checked = this.chkAdm.Checked;

    if (chkAdm.Checked == true)
    {
    foreach (DataRow dro in tab.Rows)
    {
    node = treeView1.Nodes.Add(dro["modnom"].ToString());
    foreach (DataRow dr in tabopc.Rows)
    {
    if (dro["modcod"].ToString() == dr["modcod"].ToString())
    {
    node.Nodes.Add(dr["cabnom"].ToString());
    }
    }
    }
    }
    else
    {
    treeView1.Nodes.Clear();
    }
    }

    Ese es todo respecto al primer parrafo comentado. Espero sigan apoyandome.

    Saludos!

    • Editado StevenLlaja lunes, 12 de diciembre de 2011 16:39
    lunes, 12 de diciembre de 2011 16:39