Desenvolvedores.Net - TechBlog

Monthly Archives: julho 2011

Introdução ao C# – Parte 1

2
1 Estrela2 Estrelas3 Estrelas4 Estrelas5 Estrelas (4 votos, média: 5,00 de 5)
Loading...
28 de julho de 2011

Warning: DOMDocument::loadXML(): AttValue: " or ' expected in Entity, line: 2 in /home/desenvol/public_html/techblog/wp-content/plugins/tubepress/src/main/php/add-ons/youtube/classes/tubepress/addons/youtube/impl/provider/YouTubePluggableVideoProviderService.php on line 257

Warning: DOMDocument::loadXML(): attributes construct error in Entity, line: 2 in /home/desenvol/public_html/techblog/wp-content/plugins/tubepress/src/main/php/add-ons/youtube/classes/tubepress/addons/youtube/impl/provider/YouTubePluggableVideoProviderService.php on line 257

Warning: DOMDocument::loadXML(): Couldn't find end of Start Tag html line 2 in Entity, line: 2 in /home/desenvol/public_html/techblog/wp-content/plugins/tubepress/src/main/php/add-ons/youtube/classes/tubepress/addons/youtube/impl/provider/YouTubePluggableVideoProviderService.php on line 257

Warning: DOMDocument::loadXML(): Extra content at the end of the document in Entity, line: 2 in /home/desenvol/public_html/techblog/wp-content/plugins/tubepress/src/main/php/add-ons/youtube/classes/tubepress/addons/youtube/impl/provider/YouTubePluggableVideoProviderService.php on line 257

C

Pessoal

Segue abaixo mais vídeo da série sobre .NET Framework, C# e OOP (Programação Orientada a Objetos) e neste estamos iniciando a introdução a linguagem C#.

Could not parse XML from YouTube

 

Adicionar javascript na tag head

0
1 Estrela2 Estrelas3 Estrelas4 Estrelas5 Estrelas (2 votos, média: 5,00 de 5)
Loading...
25 de julho de 2011

 Existem várias maneiras de se adicionar script dinamicamente em uma página html no lado servidor, aqui eu vou ensinar três delas.

A primeira e a mais simples é usando o ClientScriptManager que é uma classe para a manipulação de scripts do lado cliente

Vamos ao exemplo:

protected void Page_Load(object sender, EventArgs e)
{
	ClientScriptManager cs = Page.ClientScript;
	cs.RegisterClientScriptBlock(this.GetType(), "meuScript", "alert('Seja bem-vindo ao desenvolvedores.net');", true);
}

Este é o modo mais simples de se adicionar uma tag script. Vamos aos parâmetros.

No primeiro parâmetro informamos o tipo de objeto que iremos colocar o nosso script.

No segundo parâmetro informamos uma chave para identificar o nosso script.

No terceiro parâmetro informamos o nosso script.

No quarto parâmetro informamos que é para ser adicionado a tag <script>…</script>.

Usando esta técnica o script será adicionado no corpo do html, ou seja entre a tag <body>…</body>. Vejam o código gerado pelo asp

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
	Untitled Page
</title></head>
<body>
    <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGSCZayBSwoHn5bPS8BXxDJhk6Dhtg==" />
</div>

<script type="text/javascript">
//<![CDATA[
alert('Seja bem-vindo ao desenvolvedores.net');//]]>
</script>
    <div>
    </div>
    </form>
</body>
</html>

Ok! Interessante, e funciona. Mas em alguns casos eu preciso adicionar na tag <head>…</head>. Isto é interessante quando temos que declarar uma função que será executada por algum componente, ou quando queremos tratar algo antes do corpo da página ser montado. Então. Como devo proceder?

Neste caso temo que usar o objeto chamado HtmlGenericControl e definir seu tipo e atributos. Vamos ao exemplo:

protected void Page_Load(object sender, EventArgs e)
{
	HtmlGenericControl script = new HtmlGenericControl("script");
	script.Attributes.Add("type", "text/javascript");
	script.InnerHtml = "alert('Seja bem-vindo ao desenvolvedores.net');";
	this.Page.Header.Controls.Add(script);
}

Veja que definimos o tipo de objeto “script” e usamos o Attributes para definir a linguagem de script que vamos utilizar, e dentro da propriedade InnerHtml colocamos todo o código do nosso script.

Aqui o código gerado pela página, repare nas linhas em destaque que estão dentro da tag <head>…</head>.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
	Untitled Page
</title>
<script type="text/javascript">
alert('Seja bem-vindo ao desenvolvedores.net');
</script>
</head>
<body>
    <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGSCZayBSwoHn5bPS8BXxDJhk6Dhtg==" />
</div>
    <div>
    </div>
    </form>
</body>
</html>

Bom. Mas eu uso um arquivo .js para organizar meus scripts, tem como eu fazer isso usando um arquivo?

A resposta é sim, tem como. Usando a mesma técnica descrita acima. Podemos adicionar um .js à nossa página. Vamos ao exemplo:

protected void Page_Load(object sender, EventArgs e)
{
	HtmlGenericControl script = new HtmlGenericControl("script");
	script.Attributes.Add("type", "text/javascript");
	script.Attributes.Add("src", "Arquivo.js");
	this.Page.Header.Controls.Add(script);
}

Repare que tiramos o InnerHtml e colocamos mais um atributo, o src , é aqui que definimos o caminho para o nosso arquivo .js.

abaixo o código gerado pela página. Repare nas linhas em destaque

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
	Untitled Page
</title>
<script type="text/javascript" src="Arquivo.js">
</script>
</head>
<body>
    <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGSCZayBSwoHn5bPS8BXxDJhk6Dhtg==" />
</div>
    <div>
    </div>
    </form>
</body>
</html>

É isso ai pessoal 🙂
Até o próximo
♦ Marcelo

About Marcelo

Nascido em Juruaia/MG em uma fazenda de criação de búfalos, e residindo na região Sul do Brasil. Trabalha com desenvolvimento de aplicações desde os 17 anos. Atualmente é Arquiteto Organizacional na Unimake Software. Para saber mais ... http://desenvolvedores.net/marcelo []'s

Linq to Twitter

0
1 Estrela2 Estrelas3 Estrelas4 Estrelas5 Estrelas (5 votos, média: 5,00 de 5)
Loading...
20 de julho de 2011

 Ola Pessoal. Hoje eu vou falar sobre uma biblioteca para recuperar os dados do twitter que é a LinqToTwitter.

Ela é fácil de trabalhar a documentação é boa e tem bastante exemplos de uso.

Então vamos lá. Mãos a obra.

Preparando o ambiente

Siga os passos abaixo na ordem descrita

Para que o twitter funcione de modo correto precisamos criar uma aplicação dentro do twitter. Este passo não é obrigatório caso você queira pegar apenas os tweets públicos, mas se desejar pegar de um usuário específico terá que usar os passos descritos abaixo.

  1.  Faça login na sua conta do twitter neste link https://dev.twitter.com/apps/new

  2. Uma página semelhante à esta deverá ter sido aberta para você: (Clique na miniatura para ver a

    imagem da tela.)
  3. Preencha os campos
    1. “Name” (Nome da  sua aplicação)
    2. “Description” (Descrição da sua aplicação)
    3. “WebSite” (Coloque a URL do seu site onde as pessoas irão acessar os tweets)
  4. Se você preencheu todos os dados corretamente uma página semelhante a esta será exibida. (Clique na miniatura para ver a imagem da página)

  5. Mantenha esta página aberta, pois iremos usar estas configurações.

Passos para criar o projeto

  1. Faça o download da dll Linq2Twitter. Link da versão que usamos no artigo http://linqtotwitter.codeplex.com/releases/view/69833.
  2. Descompacte o arquivo que você recebeu, lembre-se do diretório, você ira precisar dele 🙂
  3. Abra o Visual Studio e crie uma nova aplicação web
  4. Faça referencia à dll LinqToTwitter.dll, ela deverá estar no diretório onde você descompactou os arquivos no passo 2

Você não precisa ter uma conta no twitter para usar a DLL, só que neste caso você ira recuperar apenas os tweeters públicos

Código de exemplo para recuperar os tweets públicos:

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Import Namespace="System.Linq" %>
<%@ Import Namespace="System.Data" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Linq To Twitter</title>

    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                var twitterCtx = new LinqToTwitter.TwitterContext();

                var publicTweets =
                    from tweet in twitterCtx.Status
                    where tweet.Type == LinqToTwitter.StatusType.Public
                    select tweet;

                System.Collections.Generic.List<object> data = new System.Collections.Generic.List<object>();

                publicTweets.ToList().ForEach(
                    tweet =>
                    {
                        data.Add(new { Nome = tweet.ScreenName, Mensagem = tweet.Text });
                    }
                    );

                grdTwitter.DataSource = data;
                grdTwitter.DataBind();

            }
            catch (Exception ex)
            {
                Context.Response.Write("Impossível conectar ao twitter<br/>" + ex.ToString());
            }
        }
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView runat="server" ID="grdTwitter">
            <Columns>
            </Columns>
        </asp:GridView>
    </div>
    </form>
</body>
</html>

Ok! Agora queremos pegar um tweet de um determinado usuário. Como fazer?

Prestem bastante atenção aos comentários pelo código

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Import Namespace="System.Linq" %>
<%@ Import Namespace="System.Data" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Linq To Twitter</title>

    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                //agora que temos uma aplicação cadastrada
                //temos que criar a autenticação ao twitter
                //primeiro criamos um objeto de autorização do tipo LinqToTwitter.SignInAuthorizer
                LinqToTwitter.SignInAuthorizer auth = new LinqToTwitter.SignInAuthorizer()
                {
                    //lembra daquele cadastro que fizemos no twitter?
                    //link:   https://dev.twitter.com/apps/new
                    //os dados que foram informados pelo twitter deverão ser informados aqui
                    //reparem que o mesmo nome da propriedade aqui é o mesmo nome da página do twitter.
                    //Não tem como errar.
                    Credentials = new LinqToTwitter.InMemoryCredentials()
                    {
                        ConsumerKey = "seu consumer key",
                        ConsumerSecret = "seu consumer secret",

                        //ATENÇÃO
                        //nesta propriedade informe o valor da página "Access token"
                        OAuthToken = "aqui vai o Access token",

                        //ATENÇÃO
                        //Nesta propriedade informe o valor da página "Access token secret"
                        AccessToken = "Aqui vai o Access token secret"
                    },

                    //estas podem manter como estão
                    UseCompression = true,
                    OAuthRequestTokenUrl = "https://api.twitter.com/oauth/request_token",
                    OAuthAccessTokenUrl = "https://api.twitter.com/oauth/access_token",
                    OAuthAuthorizeUrl = "https://api.twitter.com/oauth/authorize",
                };

                auth.Authorize();

                var twitterCtx = new LinqToTwitter.TwitterContext(auth);

                var publicTweets =
                    from tweet in twitterCtx.Status
                    where tweet.Type == LinqToTwitter.StatusType.User &&
                        tweet.ScreenName == "desenvolvedores"
                    select tweet;

                System.Collections.Generic.List<object> data = new System.Collections.Generic.List<object>();

                publicTweets.ToList().ForEach(
                    tweet =>
                    {
                        data.Add(new
                        {
                            Nome = tweet.ScreenName,
                            Mensagem = tweet.Text,
                            Site = tweet.User.URL,
                        });
                    });

                grdTwitter.DataSource = data;
                grdTwitter.DataBind();

            }
            catch (Exception ex)
            {
                Context.Response.Write("Impossível conectar ao twitter<br/>" + ex.ToString());
            }
        }
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView runat="server" ID="grdTwitter">
            <Columns>
            </Columns>
        </asp:GridView>
    </div>
    </form>
</body>
</html>

Lembre-se: No twitter na tela que se configura o site você terá sempre que informar para qual site está liberado sua aplicação. Se não fizer isso, pode ser que não funcione quando você publicar sua aplicação.


É isso ai pessoal 🙂
Até o próximo
♦ Marcelo

About Marcelo

Nascido em Juruaia/MG em uma fazenda de criação de búfalos, e residindo na região Sul do Brasil. Trabalha com desenvolvimento de aplicações desde os 17 anos. Atualmente é Arquiteto Organizacional na Unimake Software. Para saber mais ... http://desenvolvedores.net/marcelo []'s

SharpSVN

1
1 Estrela2 Estrelas3 Estrelas4 Estrelas5 Estrelas (3 votos, média: 5,00 de 5)
Loading...
17 de julho de 2011

Eu sempre usei o Subversion pra controlar as versões de meus códigos e no começo deste mês tive a necessidade de desenvolver uma aplicação que recuperasse as revisões do SVN e disponibilizasse em um site para controle dos gerentes de um dos projetos.

Como ferramenta eu optei por usar o SharpSVN, uma biblioteca escrita  para .NET. Apesar do esforço não encontrei muita coisa em português então resolvi dar uma estudada na documentação (http://docs.sharpsvn.net/current) e escrever este artigo.

Aqui eu vou mostrar uma conexão simples e como resolver o seguinte erro ao publicar o site  “SharpSvn.SvnFormatException: Can’t determine the user’s config path“.

Então vamos lá. Mãos a obra.

Primeiramente temos que preparar o nosso ambiente, para isso temos que baixar os arquivos do SharpSVN http://sharpsvn.open.collab.net/files/documents/180/4381/SSvn-1.6016.1637.zip

Extraia os arquivos.

Abra o Visual Studio e cria uma nova aplicação Web.

Faça referência a dll SharpSvn.dll.

Eu vou recuperar as versões de um projeto que nós do desenvolvedores.net apoiamos e que está no Sourceforge

Página oficial do projeto: http://uninfe.com.br

Página no Sourceforge: https://uninfe.svn.sourceforge.net/svnroot/uninfe

E como sempre, prestem atenção aos comentários do código. Eu coloco informações úteis no mesmo.

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Exemplo SVN</title>

    <script runat="server" type="text/C#">
        protected void Page_Load(object sender, EventArgs e)
        {
            //definir o datasource do meu grid
            grdRevision.DataSource = LoadSvnRevision();

            //popular os dados no grid
            grdRevision.DataBind();
        }

        private System.Collections.Generic.List<object> LoadSvnRevision()
        {
            //inicar o cliente svm
            SharpSvn.SvnClient client = new SharpSvn.SvnClient();
            //aqui iniciamos o objeto que irá receber os dados de retorno do svn.
            //Obrigatoriamente tem que ser deste tipo System.Collections.ObjectModel.Collection<SharpSvn.SvnLogEventArgs>
            //pois o parâmetro é do tipo "out"
            System.Collections.ObjectModel.Collection<SharpSvn.SvnLogEventArgs> logItems = new System.Collections.ObjectModel.Collection<SharpSvn.SvnLogEventArgs>();

            //aqui chamamos o método responsável por trazer as revisões do SVN
            //no primeiro parâmetro informamos a url do repositório. (targetPath)
            //no segundo parâmetro informamos a nossa variável que irá receber o retorno
            client.GetLog(new Uri("https://uninfe.svn.sourceforge.net/svnroot/uninfe"), out logItems);

            //aqui eu crio uma variável que irá recuperar este retorno e converter
            //em uma lista de obejtos para ser usada dentro do meu grid
            System.Collections.Generic.List<object> data = new System.Collections.Generic.List<object>();

            foreach (var item in logItems) //aqui eu uso um array nomeado do tipo Key/Value
            {
                data.Add(new
                {
                    Id = item.Revision,
                    Autor = item.Author,
                    Data = item.Time,
                });
            }

            //descarrego cliente
            client.Dispose();

            //limpo da memória
            client = null;

            //retorno minha lista de dados
            return data;
        }
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView runat="server" ID="grdRevision">
        </asp:GridView>
    </div>
    </form>
</body>
</html>

Assim temos uma aplicação básica que recupera os dados de um diretório publico. Mas, e se for em um diretório privado?

Basta acrescentar estas duas linhas ao seu código. Antes de chamar o método client.GetLog();

//Limpamos a autenticação antes de começar
client.Authentication.Clear();
//criamos uma autenticação de usuário usando o System.Net.NetworkCredential
client.Authentication.DefaultCredentials = new System.Net.NetworkCredential("Nome do usuário", "senha");

Uma outra dica que creio ser interessante passar é a opção de filtragem dos dados que iremos receber em nosso objeto de retorno. Do modo como foi feito no código de exemplo iremos recuperar todas as revisões, isso não é interessante em um projeto grande. Aqui vou ensinar a fazer o filtro por data.

//data de início do log que vamos buscar
//aqui informo +1 dia para que pegue também o dia atual
DateTime startDateTime = DateTime.Today.AddDays(1);

//iremos buscar 15 dias antes. Então informamos a segunda data
DateTime endDateTime = startDateTime.AddDays(-15);

//aqui iremos criar um "range" de datas para filtrar.
//para isso usamos o tipo SharpSvn.SvnRevisionRange
//o construtor do range aceita o tipo new SharpSvn.SvnRevision
//que por sua vez aceita vários tipos de filtros, um deles é o tipo data
//passamos então as datas de início e fim do range,
//de acordo com os parâmetros do contrutor do objeto SharpSvn.SvnRevisionRange
//primeiro e segundo parâmetro do construtor
SharpSvn.SvnRevisionRange range = new SharpSvn.SvnRevisionRange(new SharpSvn.SvnRevision(startDateTime), new SharpSvn.SvnRevision(endDateTime));

//criamos a nossa variável do tipo SharpSvn.SvnLogArgs para passar o nosso range de datas.
SharpSvn.SvnLogArgs args = new SharpSvn.SvnLogArgs(range);

//aqui chamamos o método responsável por trazer as revisões do SVN
//no primeiro parâmetro informamos a url do repositório. (targetPath)
//no segundo parâmetro passamos os argumentos de filtragem dos dados
//no terceiro parâmetro informamos a nossa variável que irá receber o retorno
client.GetLog(new Uri("https://uninfe.svn.sourceforge.net/svnroot/uninfe"), args, out logItems);

Preste atenção na linha em destaque, repare que modificamos o método client.GetLog() e passamos o parâmetro args que é o nosso filtro por data.

Vamos agora à um problema conhecido quando publicamos o nosso site.  “SharpSvn.SvnFormatException: Can’t determine the user’s config path“. Este erro não acontece no modo debug porque estamos executando nossa aplicação local e a nossa configuração de usuário já foi toda carregada. Mas quando publicamos podemos receber este erro, pois normalmente a aplicação web roda como um serviço no servidor e pode não ter toda a configuração de usuário carregada. Para isso temos que informar o caminho onde iremos salvar a configuração padrão do usuário. Podemos usar um caminho temporário ou um caminho fixo na sua aplicação. Fica a seu critério. Eu optei por executar eu um caminho temporário.

Para contornar este erro, iremos usar o método LoadConfiguration() que irá indicar onde iremos salvar o arquivo de configuração temporário.

client.LoadConfiguration(System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Svn"), true);

Atenção: Este método deve ser chamado antes de client.GetLog();

Abaixo o código completo de nossa aplicação SVN

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Exemplo SVN</title>

    <script runat="server" type="text/C#">
        protected void Page_Load(object sender, EventArgs e)
        {
            //definir o datasource do meu grid
            grdRevision.DataSource = LoadSvnRevision();

            //popular os dados no grid
            grdRevision.DataBind();
        }

        private System.Collections.Generic.List<object> LoadSvnRevision()
        {
            //inicar o cliente svm
            SharpSvn.SvnClient client = new SharpSvn.SvnClient();
            //aqui iniciamos o objeto que irá receber os dados de retorno do svn.
            //Obrigatoriamente tem que ser deste tipo System.Collections.ObjectModel.Collection<SharpSvn.SvnLogEventArgs>
            //pois o parâmetro é do tipo "out"
            System.Collections.ObjectModel.Collection<SharpSvn.SvnLogEventArgs> logItems = new System.Collections.ObjectModel.Collection<SharpSvn.SvnLogEventArgs>();

            //data de início do log que vamos buscar
            DateTime startDateTime = DateTime.Today.AddDays(1);

            //iremos buscar 15 dias antes. Então informamos a segunda data
            DateTime endDateTime = startDateTime.AddDays(-15);

            //aqui iremos criar um "range" de datas para filtrar.
            //para isso usamos o tipo SharpSvn.SvnRevisionRange
            //o construtor do range aceita o tipo new SharpSvn.SvnRevision que por sua vez aceita vários tipos de filtros, um deles é o tipo data
            //passamos então as datas de início e fim do range, de acordo com os parâmetros do contrutor do objeto SharpSvn.SvnRevisionRange
            SharpSvn.SvnRevisionRange range = new SharpSvn.SvnRevisionRange(new SharpSvn.SvnRevision(startDateTime), new SharpSvn.SvnRevision(endDateTime));

            //criamos a nossa variável do tipo SharpSvn.SvnLogArgs para passar o nosso range de datas.
            SharpSvn.SvnLogArgs args = new SharpSvn.SvnLogArgs(range);

            //aqui iremos dizer onde o arquivo de configuração do svn deverá ser salvo
            client.LoadConfiguration(System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Svn"), true);

            //aqui chamamos o método responsável por trazer as revisões do SVN
            //no primeiro parâmetro informamos a url do repositório. (targetPath)
            //no segundo parâmetro passamos os argumentos de filtragem dos dados
            //no terceiro parâmetro informamos a nossa variável que irá receber o retorno
            client.GetLog(new Uri("https://uninfe.svn.sourceforge.net/svnroot/uninfe"), args, out logItems);

            //aqui eu crio uma variável que irá recuperar este retorno e converter
            //em uma lista de obejtos para ser usada dentro do meu grid
            System.Collections.Generic.List<object> data = new System.Collections.Generic.List<object>();

            foreach (var item in logItems) //aqui eu uso um array nomeado do tipo Key/Value
            {
                data.Add(new
                {
                    Id = item.Revision,
                    Autor = item.Author,
                    Data = item.Time,
                });
            }

            //descarrego cliente
            client.Dispose();

            //limpo da memória
            client = null;

            //retorno minha lista de dados
            return data;
        }
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView runat="server" ID="grdRevision">
        </asp:GridView>
    </div>
    </form>
</body>
</html>

É isso ai pessoal 🙂
Até o próximo
♦ Marcelo

About Marcelo

Nascido em Juruaia/MG em uma fazenda de criação de búfalos, e residindo na região Sul do Brasil. Trabalha com desenvolvimento de aplicações desde os 17 anos. Atualmente é Arquiteto Organizacional na Unimake Software. Para saber mais ... http://desenvolvedores.net/marcelo []'s

Introdução ao Microsoft Visual Studio

2
1 Estrela2 Estrelas3 Estrelas4 Estrelas5 Estrelas (2 votos, média: 5,00 de 5)
Loading...
7 de julho de 2011

Warning: DOMDocument::loadXML(): AttValue: " or ' expected in Entity, line: 2 in /home/desenvol/public_html/techblog/wp-content/plugins/tubepress/src/main/php/add-ons/youtube/classes/tubepress/addons/youtube/impl/provider/YouTubePluggableVideoProviderService.php on line 257

Warning: DOMDocument::loadXML(): attributes construct error in Entity, line: 2 in /home/desenvol/public_html/techblog/wp-content/plugins/tubepress/src/main/php/add-ons/youtube/classes/tubepress/addons/youtube/impl/provider/YouTubePluggableVideoProviderService.php on line 257

Warning: DOMDocument::loadXML(): Couldn't find end of Start Tag html line 2 in Entity, line: 2 in /home/desenvol/public_html/techblog/wp-content/plugins/tubepress/src/main/php/add-ons/youtube/classes/tubepress/addons/youtube/impl/provider/YouTubePluggableVideoProviderService.php on line 257

Warning: DOMDocument::loadXML(): Extra content at the end of the document in Entity, line: 2 in /home/desenvol/public_html/techblog/wp-content/plugins/tubepress/src/main/php/add-ons/youtube/classes/tubepress/addons/youtube/impl/provider/YouTubePluggableVideoProviderService.php on line 257

vs2010_logo

Pessoal

Segue abaixo nosso segundo vídeo da série sobre .NET Framework, C# e OOP (Programação Orientada a Objetos) e neste estaremos tratando sobre a IDE do Microsoft Visual Studio (uma visão geral do seu funcionamento e recursos).

Could not parse XML from YouTube