quinta-feira, 5 de junho de 2014

Copiando um diretório recursivamente

Fala galera,

Quem já precisou criar uma cópia de um diretório já deve ter notado que a função Copy que existe na classe System.IO.File não está presente na classe System.IO.Directory.

Segue então um código para quem precisa fazer cópia de um diretório e toda sua estrutura (arquivos e subdiretórios):

public void copyFolder(string oldFolder, string newFolder)
{
    if (!Directory.Exists(newFolder))
        Directory.CreateDirectory(newFolder);

    string[] files = Directory.GetFiles(oldFolder);
    foreach (string file in files)
   {
       string name = Path.GetFileName(file);
       string dest = Path.Combine(newFolder, name);
       File.Copy(file, dest);
   }
   string[] folders = Directory.GetDirectories(oldFolder);
   foreach (string folder in folders)
  {
     string name = Path.GetFileName(folder);
     string dest = Path.Combine(newFolder, name);
     copyFolder(folder, dest);
  }
}


Um abraço e até a próxima!!

quarta-feira, 12 de fevereiro de 2014

Executando métodos em novas Threads com passagem de parâmetros

Fala galera,

Segue um código rápido para quem precisa executar métodos em threads separadas da thread principal com passagem de parâmetros:


public void meuMetodo(string param1, string param2)
{
}
Thread t = new Thread(()=>meuMetodo("abc", "def"));
t.Start();

Um abraço e até a próxima!!

quinta-feira, 6 de fevereiro de 2014

Timeout ao utilizar HttpWebRequest com protocolo HTTPS

Fala galera,

Segue mais um código pra contornar um problema comum no .net para quem precisa trabalhar com WebRequests acessando uma url através do protocolo HTTPS.

O erro que costuma ocorrer é uma mensagem de "Timeout exceeded" (Tempo limite excedido) e a solução é bastante simples. Basta adicionar as 2 linhas abaixo:

//Esta linha fará com que o certificado não seja validado (Útil em casos onde há problemas com o ceritificado)
System.Net.ServicePointManager.CheckCertificateRevocationList = false;

//Esta linha fará com que o tipo de protocolo de segurança a ser utilizado seja o SSL3 ao invés do TLS (que parece ser o protocolo padrão)
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3;


Um abraço e até a próxima!!

quarta-feira, 30 de outubro de 2013

Ajaxtoolkit - cannot read property '_notified' of null

Fala, galera!!

Hoje me deparei com a seguinte mensagem de erro ao utilizar um AutocompleteExtender dentro de um updatepanel associado a um updateprogress: "Cannot read property '_notified' of null".

 O mais estranho é que o erro só acontece no Google Chrome. Após uma breve pesquisa, descobri que o erro trata-se de um problema no código de detecção do browser do arquivo MicrosoftAjax.js que não detecta o webkit.

 O webkit é um mecanismo de renderização de páginas utilizado por browsers como o Google Chrome e Safari.

Para contornar esse problema basta incluir o código abaixo na sua página aspx:
 <script type="text/javascript">

Sys.Browser.WebKit = {};
if (navigator.userAgent.indexOf('WebKit/') > -1) {
    Sys.Browser.agent = Sys.Browser.WebKit;
    Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]);
    Sys.Browser.name = 'WebKit';
 }

</script>

 Um abraço e até a próxima!!

sábado, 10 de agosto de 2013

Desabilitando itens no dropdownlist

Fala galera,

Após muito tempo de inatividade no blog, segue mais um compartilhamento de código.
Durante essa semana me deparei com a necessidade de categorizar os itens dentro de um dropdownlist.

Algo mais ou menos assim:

Categoria 1
--- item 1.1
--- item 1.2
--- item 1.3
Categoria 2
--- item 2.1
--- item 2.2
--- item 2.3

Acontece que os itens "categoria 1" e "categoria 2" são apenas informativos e não podem ser selecionáveis.
Para isso, é preciso desabilitar a opção de seleção desses itens.

Definir o atributo "enabled" no server-side como false não soluciona o problema. É preciso trabalhar com os atributos no lado do cliente.

Segue então o código para desabilitar o item no dropdown:

System.Web.UI.WebControls.ListItem item = ddl.Items.FindByValue("[valor]");
if (item != null)
{
   item.Attributes.Add("style""color:gray;");
   item.Attributes.Add("disabled""true");
}

Onde [valor] corresponde ao valor que identifica o item(propriedade value) que deve ser desabilitado.



Um abraço e até a próxima!!

quarta-feira, 26 de dezembro de 2012

Ordenação de dados em Gridview

Fala, galera!!

Hoje postarei uma solução simples utilizando JQuery para uma tarefa um pouco trabalhosa se feita via C# puro: Ordenação de dados em GridView.

Para isso, utilizaremos o plugin TableSorter para Jquery que pode ser encontrado em http://tablesorter.com/docs/.

Para começar, adicione o seguinte código ao code-behind para que sejam incluídas na sua gridview as seções <thead> e <tbody> que serão utilizadas pelo TableSorter:


protected void GridView1_PreRender(object sender, EventArgs e)
        {
           //As 2 linhas abaixo só devem ser adicionadas se você não estiver utilizando ObjectDataSource,   SqlDataSource ou LinqDataSource
            GridView1.DataSource = "SEU DATASOURCE";
            GridView1.DataBind();
            if (GridView1.Rows.Count > 0)
            {
                //Substitui <td> por <th>
                GridView1.UseAccessibleHeader = true;
                //Adiciona <thead> e <tbody>
                GridView1.HeaderRow.TableSection = TableRowSection.TableHeader;
            }
        }

Adicione as referências e o script abaixo em sua página ASPX e seu gridview estará com a ordenação funcionando:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

<script type="text/javascript" src="/script/tablesorter/jquery.tablesorter.js"></script>

<link rel="stylesheet" href="/script/tablesorter/themes/blue/style.css" type="text/css"  id="" media="print, projection, screen" />


$(document).ready(function() {
       $("#<%=GridView1.ClientID%>").tablesorter();
});

É possível a criação de widgets que fazem com que a ordenação selecionada seja persistida durante a sessão do usuário. Mais informações em: http://ybits.net/2009/10/making-jquery-tablesorter-persistent/

Um abraço e até a próxima!!

quinta-feira, 8 de novembro de 2012

Corrigindo erro de acesso ao Oracle - System.Data.OracleClient requires Oracle cliente software version 8.1.7 or greater

Fala, galera!!

Segue uma dica rápida e útil para quem utiliza banco de dados Oracle.

Ao tentar se conectar no Oracle utilizando o driver Sytem.Data.OracleClient pode ocorrer o seguinte erro:
"System.Data.OracleClient requires Oracle cliente software version 8.1.7 or greater"

A solução não é a atualização do Driver, como sugere a mensagem de erro, mas a troca do mesmo para o ODP.net (Oracle Data Provider for .Net)

A própria Microsoft sugere o uso do ODP.net.

O driver da Oracle pode ser baixado no endereço abaixo:
http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html

Segue link do site da Oracle sobre o ODP.net:
http://www.oracle.com/technetwork/topics/dotnet/index-085703.html

Comparativo entre o ODP.net e Microsoft.OracleClient:
http://www.oracle.com/technetwork/topics/dotnet/index-154765.html

OBS: Reinicie a máquina após a instalação do ODP.net.

Um abraço e até a próxima!!