terça-feira, 14 de julho de 2009

Predicate Delegate

Um predicate é uma função que retorna true ou false. O predicate delegate é uma referencia para o predicate.

Então basicamente um predicate delegate é uma referencia para uma função que retorna true ou false. Predicates são normalmente aplicáveis para filtar lista de valores. Veja um exemplo:

using System;
using System.Collections.Generic;

class Program
{
   
static void Main()
   
{
       
List<int> list = new List<int> { 1, 2, 3 };

       
Predicate<int> predicate = new Predicate<int>(pegueMaiorQueDois);

       
List<int> novaList = list.FindAll(predicate);
   
}

   
static bool pegueMaiorQueDois(int arg)
   
{
       
return arg > 2;
   
}
}

Agora se você utiliza o C# 3 você pode usar uma expressão lambda para representar o predicate:

using System;
using System.Collections.Generic;

class Program
{
   
static void Main()
   
{
       
List<int> list = new List<int> { 1, 2, 3 };

       
List<int> novaList = list.FindAll(i => i > 2);
   
}
}
Você também pode de um jeito direto, colocar a função:
 
using System;
using System.Collections.Generic;

class Program
{
   
static void Main()
   
{
       
List<int> list = new List<int> { 1, 2, 3 };

       
List<int> newList = list.FindAll(delegate(int arg)
                           
{
                               
return arg> 2;
                           
});
   
}
}

sexta-feira, 19 de junho de 2009

Condição SQL Oracle

Criando uma codição no prompt do SQL Plus (Oracle):

declare

v_count number;

begin

select count into v_count from all_tables where table_name=v_nome_tabela;

if v_count > 0 then

drop table v_nome_table as cascade;

end if;

end;

 
"No caso" é um se a tabela existe então faça o drop. É isso.

Update Panel na MasterPage via SubPage

Cenário: Um página com masterpage, updatepanel na masterpage, e na subpage outro updatepanel.
Situação: Quando é feito post na subpage precisa atualiza o updatepanel da masterpage.
Porque: Neste post é atualizado valores de controles da masterpage que precisão ser exibidos
 

((UpdatePanel)Master.FindControl("updatePanelMaster")).Update();

 
Nota: Se seu updatepanel é muito pesado, (+ de 5 quilos de controles), recomendo fazer po javascript como já demonstrado aqui.
 
 

quinta-feira, 18 de junho de 2009

System.Linq.OrderedEnumerable tipo System.Collections.Generic.List

Problema: Não tenho com alterar o XML do mapeamento do nHibernate para ordernar a query
Solução: Implementar um especifica ordenação no GetAll()
 
        public IList<qqClass> GetAll()
        {
               return qqClass.GetAll().OrderBy(qqClasses => qqClasses.Name).ToList<qqClass>();
        }
 
Comentários: Não tem como fazer direto, pois é um Enumerable (linq) com um Collections(list)

How to call client-side Javascript function after an UpdatePanel asychronous (Ajax) request is over

Necessidade: Fazer atualização de um controle que está na masterpage quando retorna do postback do ajax.
Problema: É utilizado no contentpage o updatepanel, atualizando somente os controles que estão no updatepanel, a masterpage não sofre refresh.
Solução: Adicionar (registrar) uma função javascript e O COMANDO.
 
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(suaFunctionJavaScript)
 
em seu page load você pode colocar:
 
if (!Page.ClientScript.IsClientScriptBlockRegistered(UpdatePanel1.GetType(), "resetDefaultFired")) {
    string resetGlobalVar = "function message() { document.getElementById('" + (Master.FindControl("lblMessage") as  Label).ClientID + "').innerHTML = document.getElementById('" + lblMessage.ClientID + "').innerHTML; }";
resetGlobalVar += " Sys.WebForms.PageRequestManager.getInstance().add_endRequest(message); ";
Page.ClientScript.RegisterStartupScript(UpdatePanel1.GetType(), "resetDefaultFired", resetGlobalVar, true
);
}
 
Então você envia o que você quer para um controle "lblMessage" e o outro controle "master lblMessage" recebe.
 

terça-feira, 14 de abril de 2009