Calendário para Web… um desafio…?
Durante este último mês apresentou-se perante mim a oportunidade de desenvolver um calendário para Web que tivesse um funcionamento mais parecido com células do nosso conhecido “Microsoft Excel”. À partida, tal parece problemático, a não ser que ponhamos a séria hipótese de usar o nosso maior aliado para este fim: Javascript.
O Javascript permite-nos basear a funcionalidade do calendário mais em Client-Side do que em Server-Side, facilitando-nos variadas tarefas como mudar de cores ou fazer display de mensagens no ecrã – isto sem termos de submeter os dados regularmente.
Resta dizer que, apesar de ser um desafio, é bastante exequível, desde que partamos do pressuposto que vamos usar mais Javascript do que é habitual em maior parte das Web applications.
Segue-se um exemplo bastante simples da utilização de Javascript para adicionar funcionalidade a um calendário:
- <script type=“text/javascript” language=“javascript”>
- var daysToShow;
- function jsChangeColor(textBoxObj, parentCellID, daysRemaining, totalDays, originalValue) {
- var radioButton = document.getElementById(“<%=this.radioBtnControl.ClientID %>”);
- if (radioBtnControl.checked)
- {
- if (daysToShow == undefined)
- {
- daysToShow = daysRemaining;
- }
- textBoxObj = document.getElementById(textBoxObj);
- var textBoxValue = parseInt(textBoxObj.value);
- var DBValue = originalValue;
- if (textBoxValue == 10)
- {
- textBoxObj.value = 7;
- ColorCells(textBoxObj.value, parentCellID);
- document.getElementById(“<%=this.labelToShowValue.ClientID %>”).innerHTML = “( “ + daysToShow + “/” + totalDays + ” )”;
- FillHdnField(daysToShow);
- objInputBuffer = document.getElementById(“<%=this.textBoxToReceiveChangedValues.ClientID %>”);
- var mynewvalue = textBoxObj.id + “=” + textBoxObj.value + “/” + DBValue + “;”;
- objInputBuffer.value = objInputBuffer.value.replace(textBoxObj.id + “=” + textBoxValue + “/” + DBValue + “;”, “”);
- objInputBuffer.value = mynewvalue + objInputBuffer.value;
- }
- }
- function ColorCells(cellObjectValue, parentCellID)
- {
- document.getElementById(parentCellID).style.background = “”;
- switch (parseInt(cellObjectValue))
- {
- case 1:
- GetColorString(“#3F8FFF”, parentCellID, true);
- break;
- case 2:
- GetColorString(“#FFF65E”, parentCellID, true);
- }
- }
- function GetColorString(colorString, parentCellID, isBackColor)
- {
- if(isBackColor)
- {
- document.getElementById(parentCellID).style.backgroundColor = colorString;
- }
- else
- {
- document.getElementById(parentCellID).style.background = colorString;
- }
- }
- function FillHdnField(finalValue)
- {
- document.getElementById(“<%= this.hiddenField.ClientID %>”).value = finalValue;
- }
- </script>
A função jsChangeColor recebe vários parâmetros e caso o radioButton esteja checked, processa e passa a colorir uma célula do calendário.
Resumindo, resta mais uma vez sublinhar o quão importante é compreendermos que o Javascript, embora “assuste” alguns programadores, é um aliado imprescindível para este tipo de controlos.
Isto não significa que a utilização do controlo de calendário de ASP .NET não tenha a sua quota de dificuldade. É um controlo que tem algumas limitações quanto à extensão da sua funcionalidade de base, como podemos ver na situação engraçada que se segue:
