Tag Archives: Forms

DotNetNuke – Criando formulário dinâmicos e customizados

DotNetNukeLogoSe tem uma coisa da qual os usuários do CMS DotNetNuke sentem muita falta, principalmente pela maturidade do sistema, é permitir criar formulários customizados.

Exemplo simples. Você precisa fazer uma coleta de dados de seus visitantes, meia dúzia de questões de campos que resolveriam seu problema, simples demais para o desenvolvimento de um novo módulo, só para isso, complicado demais para um módulo de Survey.

Pelo visto, a comunidade reagiu. O coleta Michael Tobisch desenvolveu um módulo que faz exatamente o descrito acima. São eles:

  • helferlein Form
  • helferlein_BabelFish (requerido)

Ambos podem ser baixados do site gratuitamente, exigindo apenas o registro, que também o é. A instalação segue o padrão, bastando utilizar a interface de administração do DotNetNuke. A única atenção é de instalar o módulo helferlein_BabelFish antes do helferlein_Form. O helferlein_BabelFish permite a localização, ou melhor, a tradução dos módulos disponibilizados no site.

Daí em diante, ele já está disponível para ser adicionado ao site pela barra de tarefas padrão:

helferlein_Form na barra de ferramentas
helferlein_Form na barra de ferramentas

Uma vez colocado, ele solicita, antes de qualquer coisa, uma forma de “submissão”, ou seja, para onde vão os dados que são colocados no formulário que você cria. Há duas opções: Email e Banco de Dados. O melhor de tudo é que estas não são auto exclusivas, podendo trabalhar em conjunto.

O comportamento do Email é óbvio. No caso do banco de dados, as informações pode ser vistas no próprio módulo, mas nada muito refinado, mas passível de leitura.

O CAPTCHA também está presente. Outros recursos são:

  • Localização
  • Customização da aparência/layout
  • Moderação
  • Redirecionamento após o preenchimento do formulário
  • Validação, com customização do layout destas e das mensagens apresentadas
  • Texto de Ajuda para cada item do formulário

Abaixo um exemplo bem simples de formulário montado no módulo:

Exemplo de formulário no helferlein_Form
Exemplo de formulário no helferlein_Form

Versões

O helferlein_Form suporta as versões 4.x e 5.x do DotNetNuke. Aqui, a instalação falhou na versão 5.0, mas foi bem na 5.5. Também estão disponíveis o código fonte dos mesmos.

Download

O download do helferlein_Form pode ser feito no seguinte endereço:

http://www.helferlein.com/DotNetNuke/helferlein_BabelFishModule/tabid/804/language/en-US/Default.aspx

VBA – Ordenando Arrays e Listas

Uma funcionalidade não nativa do VBA é a ordenação, seja lá ela qual for.

Ela comumente é necessária em Arrays e controles de lista, como ListBox e ComboBox. Métodos de ordenação existem aos montes. Neste caso, usarei o QuickSort, escrito pelo camarada Frederik do http://users.skynet.be/am044448/Programmeren/. O código abaixo faz a ordenação de um Array passado por parâmetro.

Private Sub QuickSort(strArray() As String, intBottom As Integer, intTop As Integer)
    Dim strPivot As String, strTemp As String
 
    Dim intBottomTemp As Integer, intTopTemp As Integer
    intBottomTemp = intBottom
 
    intTopTemp = intTop
    strPivot = strArray((intBottom + intTop) \ 2)
    While (intBottomTemp <= intTopTemp)
        While (strArray(intBottomTemp) < strPivot And intBottomTemp < intTop)
 
            intBottomTemp = intBottomTemp + 1
 
        Wend
        While (strPivot < strArray(intTopTemp) And intTopTemp > intBottom)
 
            intTopTemp = intTopTemp - 1
 
        Wend
        If intBottomTemp < intTopTemp Then
 
            strTemp = strArray(intBottomTemp)
 
            strArray(intBottomTemp) = strArray(intTopTemp)
 
            strArray(intTopTemp) = strTemp
 
        End If
        If intBottomTemp <= intTopTemp Then
 
            intBottomTemp = intBottomTemp + 1
 
            intTopTemp = intTopTemp - 1
 
        End If
    Wend
    'faz a chamada recursiva a si própria até que lista esteja preenchida
 
    If (intBottom < intTopTemp) Then QuickSort strArray, intBottom, intTopTemp
 
    If (intBottomTemp < intTop) Then QuickSort strArray, intBottomTemp, intTop
End Sub

A função não tem um retorno, mas como um array passado por parâmetro para um função é sempre por referência, após a execução desta seu Array estará ordenado em ordem crescente.

Para testar o funcionamento da função, crie um userForm no VBA. Coloque nele um ListBox e um CommandButton, sem se preocupar com alterar seus nomes. Coloque no código do Form a função QuickSort mostrada acima, mais o código abaixo.

Private Sub CommandButton1_Click()
    Dim MyArray(12) As String
    Dim i As Long
 
    'caso não haja itens na lista, não é necessário fazer ordenação
    If ListBox1.ListCount &lt;= 1 Then Exit Sub
    'alimenta o array
    For i = 0 To ListBox1.ListCount - 1
        MyArray(i) = ListBox1.List(i, 0)
    Next i
 
    'ordena o array
    QuickSort MyArray, LBound(MyArray), UBound(MyArray)
    'limpa o listbox
    ListBox1.Clear
    'usa o array ordenado para preencher o listbox
    For i = 1 To UBound(MyArray)
        ListBox1.AddItem MyArray(i)
    Next i
End Sub
Private Sub UserForm_Initialize()
'preenche o listbox com os meses do ano
    For i = 1 To 12
        ListBox1.AddItem MonthName(i, False)
    Next
End Sub

Ao executar o form da primeira vez, pode-se ver que o ListBox é preenchido com os meses do ano através da função MontName.

ordena_listbox_vba
Listbox Carregado com os meses

O código colocado no evento click do botão cria um array de string de tamanho 12, preenche o array com a lista de valores presente no listbox, ordena o array através da função QuickSort e re-preenche o listbox.

ListBox Ordenado
ListBox Ordenado

Uma forma bem simples de fazer ordenação em listas sempre precisar ficar re-pensando no código sempre que precisar.

<< Download do Arquivo >>

Abraços

Tomás

.NET – Corrigindo o erro DataGridViewComboBoxCell Value is not Valid

Se você ainda não esbarrou com este erro, está com sorte.

Quando acontece, é sempre no fechamento do formulário, sendo apresentado inúmeras vezes.

O erro apenas acontece se o autosizemode de uma coluna do tipo datagridviewcombobox estiver definido. Se o autosizemode não for definido, o erro não acontece.

Isso nos leva a duas situações :

O erro pode acontecer quando o autosizemode está definido a nível da DataGridView e existe uma coluna do tipo ComboBox na GridView

O erro pode acontecer quando o autosizemode está definido a nível de coluna e foi definido na coluna do tipo ComboBox

O erro ocorre porque no momento do fechamento do formulário, o formulário realiza primeiramente o dispose do datasource da coluna ComboBox. Quando o datasource é destruido e o autosize está definido, a ComboBox precisa recalcular o seu tamanho, então faz uma requisição por dados que não estão mais lá

Sem dúvida que desligar o autoSizeMode é uma solução, mas não desejamos isso, precisamos do autoSize

No momento em que o formulário for fazer o dispose do datasource da comboboxColumn, a ComboBoxColumn precisa estar com o autosizemode definido como None

Lembre-se que o autosizemode pode ser também definido no nível da grid, dai a diferença entre definir o autoSizeMode como None ou como NotSet

Então no evento form_Closed podemos simplesmente alterar o autosizemode da comboboxcolumn e com isso passaremos a poder utilizar o autoSize enquanto que o erro desaparecerá.

Lembre-se que cada coluna da DataGridView possui um nome e é uma variável acessível por código. Veja como fica :

NomeDaSuaColuna.AutoSizeMode =DataGridViewAutoSizeColumnMode.None;

Fonte: www.bufaloinfo.com.br

Abraços

Tomás Vásquez
www.tomasvasquez.com.br