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!!
quarta-feira, 26 de dezembro de 2012
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!!
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!!
quinta-feira, 1 de novembro de 2012
Gerando PDF a partir de uma URL
Fala, galera!!
Hoje vou postar um código de grande utilidade para quem precisa trabalhar com a geração de PDF.
Pesquisando na internet encontrei muitos componentes pagos e alguns gratuitos, mas que não funcionavam de forma tão simples. O simples, no meu caso, é criar um arquivo PDF a partir de uma URL.
Testei o iTextSharp que é um dos mais conhecidos, mas não funcionou da forma que eu esperava.
Eis que encontrei o wkhtmltopdf.
O componente pode ser baixado em: http://code.google.com/p/wkhtmltopdf/
Basicamente, é um arquivo exe que recebe como parâmetro a url que será convertida em pdf e o nome do arquivo pdf que será gerado.
O lado negativo é que ao usar um servidor compartilhado você pode ter problemas de permissão para executar o componente. Já fiz alguns testes em servidores compartilhados e não tive esse problema. Mas cada ambiente é um ambiente.
O componente não precisa ser instalado. O instalador apenas desempacota os arquivos para um diretório escolhido. Você pode simplesmente copiar esse diretório para o diretório de sua aplicação no servidor e executá-lo a partir da aplicação.
O código é bastante simples:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden; //Faz com que o processo seja executado em background
startInfo.FileName = "c:\diretorio\wkhtmltopdf.exe" ;
startInfo.Arguments = "http://www.suaurl.com/pagina. aspx + " " + "c:\diretorio\arquivo.pdf";
Process processo = Process.Start(startInfo);
processo.WaitForExit();
processo.Close();
processo.Dispose();
Um abraço e até a próxima!!
Hoje vou postar um código de grande utilidade para quem precisa trabalhar com a geração de PDF.
Pesquisando na internet encontrei muitos componentes pagos e alguns gratuitos, mas que não funcionavam de forma tão simples. O simples, no meu caso, é criar um arquivo PDF a partir de uma URL.
Testei o iTextSharp que é um dos mais conhecidos, mas não funcionou da forma que eu esperava.
Eis que encontrei o wkhtmltopdf.
O componente pode ser baixado em: http://code.google.com/p/wkhtmltopdf/
Basicamente, é um arquivo exe que recebe como parâmetro a url que será convertida em pdf e o nome do arquivo pdf que será gerado.
O lado negativo é que ao usar um servidor compartilhado você pode ter problemas de permissão para executar o componente. Já fiz alguns testes em servidores compartilhados e não tive esse problema. Mas cada ambiente é um ambiente.
O componente não precisa ser instalado. O instalador apenas desempacota os arquivos para um diretório escolhido. Você pode simplesmente copiar esse diretório para o diretório de sua aplicação no servidor e executá-lo a partir da aplicação.
O código é bastante simples:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden; //Faz com que o processo seja executado em background
startInfo.FileName = "c:\diretorio\wkhtmltopdf.exe"
startInfo.Arguments = "http://www.suaurl.com/pagina.
Process processo = Process.Start(startInfo);
processo.WaitForExit();
processo.Close();
processo.Dispose();
Um abraço e até a próxima!!
terça-feira, 3 de julho de 2012
Gerando string randômica
Fala, galera!!
Mais um post com uma função simples, mas de grande utilidade: Geração de string randômica.
No meu caso, essa função foi utilizada para a geração de uma senha randômica que será enviada para um usuário quando o mesmo for cadastrado no meu sistema.
Segue o código:
public string GenerateRandomString(int passwordLength)
{
string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?_-";
char[] chars = new char[passwordLength];
Random rd = new Random();
for (int i = 0; i < passwordLength; i++)
{
chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
}
return new string(chars);
}
Um abraço e até a próxima!!
Mais um post com uma função simples, mas de grande utilidade: Geração de string randômica.
No meu caso, essa função foi utilizada para a geração de uma senha randômica que será enviada para um usuário quando o mesmo for cadastrado no meu sistema.
Segue o código:
public string GenerateRandomString(int passwordLength)
{
string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?_-";
char[] chars = new char[passwordLength];
Random rd = new Random();
for (int i = 0; i < passwordLength; i++)
{
chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
}
return new string(chars);
}
Um abraço e até a próxima!!
Marcadores:
Random,
randômica,
randômico,
senha randômica,
string
segunda-feira, 2 de julho de 2012
Verificando a consistência do XML
Fala, galera!!
Estou trabalhando numa tela de manipulação de arquivos XML e uma dos requisitos é garantir que o XML editado seja consistente para evitar erros na leitura do mesmo posteriormente.
Segue o código para a validação da consistência do código XML:
public bool xmlEhValido(string xmlContent)
{
try
{
XDocument.Parse(xmlContent); return true;
}
catch
{
return false;
}
}
Um abraço e até a próxima!!
Estou trabalhando numa tela de manipulação de arquivos XML e uma dos requisitos é garantir que o XML editado seja consistente para evitar erros na leitura do mesmo posteriormente.
Segue o código para a validação da consistência do código XML:
public bool xmlEhValido(string xmlContent)
{
try
{
XDocument.Parse(xmlContent); return true;
}
catch
{
return false;
}
}
Um abraço e até a próxima!!
domingo, 3 de junho de 2012
Operation is not valid due to the current state of the object.
Fala, Galera!!
Mais informações podem ser encontradas no post abaixo:
http://stackoverflow.com/questions/8684049/asp-net-ms11-100-how-can-i-change-the-limit-on-the-maximum-number-of-posted-for
Um abraço e até a próxima!!
Essa semana me deparei com o seguinte erro ao tentar exportar dados de um gridview para excel: Operation is not valid due to the current state of the object.
A princípio achei que o problema estivesse na exportação dos dados para o excel. Wrong!
Existem alguns relatos, não confirmados pela Microsoft, de que uma atualização de segurança limita em 1000 o número de campos permitidos durante o postback de uma página.
O que faz todo sentido diante do comportamento do erro. Quando faço testes com uma massa menor de dados, o erro não ocorre. Quando aumento a massa de dados o erro passa a ocorrer.
A solução é simples. Basta adicionar a seguinte linha no web.config na seção "AppSettings":
<add key="aspnet:MaxHttpCollectionKeys" value="2001" />A linha acima aumenta para 2001 o número de campos permitidos durante o postback.
Mais informações podem ser encontradas no post abaixo:
http://stackoverflow.com/questions/8684049/asp-net-ms11-100-how-can-i-change-the-limit-on-the-maximum-number-of-posted-for
Um abraço e até a próxima!!
segunda-feira, 21 de maio de 2012
DataTable - Removendo linhas em branco
Fala, galera!!
Depois de mais um longo período de inatividade, segue mais um post relâmpago, mas de grande utilidade.
Me deparei hoje com a necessidade de remover todas as linhas em brano de um DataTable.
Esperava que existisse um método mais sugestivo para isso. Algo como "IgnoreEmptyRows" ou "RemoveEmptyRows". Mas seria fácil demais, né? :)
A solução até que é simples, mas não tão sugestiva.
Vamos ao código:
Minha sugestão é criar o seu próprio RemoveEmptyRows:
Depois de mais um longo período de inatividade, segue mais um post relâmpago, mas de grande utilidade.
Me deparei hoje com a necessidade de remover todas as linhas em brano de um DataTable.
Esperava que existisse um método mais sugestivo para isso. Algo como "IgnoreEmptyRows" ou "RemoveEmptyRows". Mas seria fácil demais, né? :)
A solução até que é simples, mas não tão sugestiva.
Vamos ao código:
MeuDataTable = MeuDataTable.Rows.Cast<DataRow>().Where(row => !row.ItemArray.All(field => field is System.DBNull || string.Compare((field as string).Trim(), string.Empty) == 0)).CopyToDataTable();
Simples, não? Mas, certamente, não tão fácil de lembrar quanto um simples "RemoveEmptyRows" :)
Minha sugestão é criar o seu próprio RemoveEmptyRows:
public DataTable RemoveEmptyRows (DataTable MeuDataTable)
{
MeuDataTable = MeuDataTable.Rows.Cast<DataRow>().Where(row => !row.ItemArray.All(field => field is System.DBNull || string.Compare((field as string).Trim(), string.Empty) == 0)).CopyToDataTable();
return MeuDataTable ;
}
Um abraço e até a próxima!!
Assinar:
Postagens (Atom)