예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="helper">HtmlHelper - helper para chamar esse método a partir de @HTML no razor</param>
        /// <param name="name">string - name do controle/input no formulário</param>
        /// <param name="id">string - id do controle no formulário</param>
        /// <param name="classe">string - classe OptionNivelX para identificar a profundidade da classe</param>
        /// <param name="lista">TFWHierarchicalList - lista hierárquica com os dados estruturados</param>
        /// <param name="valorAtual">string - valor atual selecionado</param>
        /// <param name="useValorpath">bool - ture para mostrar o path inteiro, false para mostrar só o valor corrente</param>
        /// <param name="formato">TFWFormatacaoDeArvore - define se deve permitir ou restringir a seleção de opções raiz, galhos ou pais de grupos</param>
        /// <param name="htmlAttributes">Objeto - lista de atributos para serem adicionados como atributos html no código gerado</param>
        /// <returns>MvcHtmlString - string razor com o HTML para gerar um dropdown hierárquico</returns>
        public static MvcHtmlString DropDownHierarquico(
            this HtmlHelper helper,
            string name,
            string id,
            string classe,
            TFWHierarchicalList lista,
            string valorAtual,
            bool useValorpath             = false,
            TFWFormatacaoDeArvore formato = TFWFormatacaoDeArvore.PermitirNosComFilhos,
            object htmlAttributes         = null)
        {
            TreeViewComboBuilder trv = new TreeViewComboBuilder(name, id, classe);

            trv.HierarchicalDataBind(lista, valorAtual, useValorpath, formato);
            return(new MvcHtmlString(trv.GetDropDown(htmlAttributes)));
        }
예제 #2
0
        /// <summary>
        /// método privado recursivo que constroi e estiliza os itens de um DropDownList ou ListBox hierárquico
        /// </summary>
        /// <param name="lista">HierarchicalList a ter seus itens publicados</param>
        /// <param name="useValorpath">bool - define se usará um tooltip com o caminho completo ou não</param>
        /// <param name="formato">FormatacaoDeArvore - define se permite ou não seleção de itens com nodes filhos</param>
        /// <param name="nivel">int - nivel corrente na hierarquia</param>
        /// <param name="primeiroVazio">bool - define se o primeiro item é vazio ou não. É passado true somente na primeira iteração recursiva.</param>
        private void _scanTrees(TFWHierarchicalList lista, string valorAtual, bool useValorpath, TFWFormatacaoDeArvore formato, int nivel = 0, bool primeiroVazio = true)
        {
            if (primeiroVazio && (nivel == 0))
            {
                _items.Add("<option value=\"\"></option>");
            }

            foreach (var c in lista)
            {
                string itemStr = "<option {3} {4} {5} data-toggle=\"tooltip\" title=\"{2}\" value=\"{0}\">{1}</option>";

                string[] parts   = c.ValorPath.Split('/').ToArray();
                string   caminho = String.Join("/", parts);

                string valor = c.Id.ToString("0");
                string texto = (useValorpath && !string.IsNullOrWhiteSpace(caminho)) ? caminho : c.Valor;

                var    path     = c.ValorPath;
                string title    = path;
                string classe   = "";
                string disabl   = "";
                string selected = c.Id.ToString("0") == valorAtual?"selected":"";

                //deve repetir essa verificação antes da chamada recursiva e antes de adicionar o item
                if (c.HasChildren)
                {
                    switch (formato)
                    {
                    case TFWFormatacaoDeArvore.SugerirApenasFolhas:
                        classe = string.Format("class=\"{0}\"", "OptionNivel" + nivel.ToString("0") + " disabled");
                        break;

                    case TFWFormatacaoDeArvore.PermitirApenasFolhas:
                        classe = string.Format("class=\"{0}\"", "OptionNivel" + nivel.ToString("0") + " disabled");
                        disabl = "disabled=\"disabled\"";
                        break;

                    default:
                        classe = string.Format("class=\"{0}\"", "OptionNivel" + nivel.ToString("0"));
                        break;
                    }
                }
                else
                {
                    classe = string.Format("class=\"{0}\"", "OptionNivel" + nivel.ToString("0"));
                }

                if (!c.Ativo)
                {
                    disabl = "disabled=\"disabled\"";
                }


                _items.Add(string.Format(itemStr, valor, texto, title, classe, disabl, selected));

                if (c.HasChildren)
                {
                    _scanTrees((TFWHierarchicalList)c.GetChildren(), valorAtual, useValorpath, formato, nivel + 1, false);
                }
            }
        }
예제 #3
0
 /// <summary>
 /// percorre uma lista hierárquica em usa profundidade para adicionar os itend em um ListBox
 /// </summary>
 /// <param name="lista">HierarchicalList - lisa hierárquica a ser exibida em um combo</param>
 /// <param name="useValorpath">bool - define se deve ser criado um hint/tooltip com o caminho completo do item</param>
 /// <param name="formato">define se é permitido ou não nodes com filhos, e se eles são selecionáveis ou não</param>
 public void HierarchicalDataBind(TFWHierarchicalList lista, string valorAtual, bool useValorpath = false, TFWFormatacaoDeArvore formato = TFWFormatacaoDeArvore.PermitirNosComFilhos)
 {
     _scanTrees(_getRoots(lista), valorAtual, useValorpath, formato, 0, true);
 }