none
Filtrar dados do XML por QueryString RRS feed

  • Pergunta

  • Olá Pessoal,

    Estou com uma dúvida, acredito que seja Simples, sou iniciante em .Net, mas já consigo fazer muitas coisas.

    Estou trabalhando com o Calendário do Asp.Net e XML, esse XML armazena as datas que são de feriados e dias Letivos...

    na hora que clicar em uma data que tenha um Evento, ele joga a data por QueryString, na outra página eu tenho um DataList que carrega as informações da data!!!

    o Código do Calendário para jogar por QueryString está assim:

    protected void Calendario_SelectionChanged(object sender, EventArgs e)
        {
            string url = "CalendarioDatas.aspx?" + "Data=" + Calendario.SelectedDate.ToShortDateString();
            Response.Redirect(url);
        }
    Na Página CalendarioDatas.aspx está assim:

    public partial class CalendarioDatas : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                VincularGrid();
            }
        }
    
        // Cria uma propriedade para armazenar o nome do Arquivo
        private string arquivo
        {
            get
            {
                return Server.MapPath("XML/Calendario.xml");
            }
        }
    
        // Cria uma Propriedade chamada ds para retornar um DataSet
        private DataSet _ds = null;
        private DataSet ds
        {
            get
            {
                if (_ds == null)
                {
                    _ds = new DataSet();
                    _ds.ReadXml(this.arquivo);
                }
                return _ds;
            }
        }
    
        // Cria um Método para vincular a Grid
        private void VincularGrid()
        {
            try
            {
                if (Request.QueryString["Data"] != null)
                {
                    string _data = Request.QueryString["Data"];
                    datasDataList.DataSource = this.ds;
                    datasDataList.DataBind();
                }
            }
            catch
            {
                //dataLabel.Visible = false;
            }
        }
    }

    Eu não estou conseguindo Listar somente 1 data, ele está puxando todas as datas do meu XML...

    Qual a melhor solução de Resolver isso???
    quarta-feira, 9 de dezembro de 2009 17:01

Respostas

  • Fale,

    Da forma que mostrei foi somente um exemplo direto no código, agora se for query string faz assim:

    string _data = "'" + Request.QueryString["Data"] + "'";
    Abraço!
    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    quinta-feira, 10 de dezembro de 2009 13:46

Todas as Respostas

  • Cara, pelo seu código acima, você está recuperando a data da querystring, mas não está filtrando o DataSet com o valor recuperado.

    Exemplo (sem o devido tratamento dos valores):

    datasDataList.DataSource = this.ds.Tables[0].Select("coluna = " _data);

    Links úteis:
    http://idunno.org/archive/2004/10/28/144.aspx
    http://forums.asp.net/t/1202887.aspx

    Mamão com açúcar! Se resolveu, classifique a mensagem, por favor!
    quarta-feira, 9 de dezembro de 2009 20:21
  • Fale,

    ds.Tables[0].DefaultView.RowFilter = "Data=" + _data;
    datasDataList.DataSource = ds.Tables[0];
    datasDataList.DataBind();

    Abraço!
    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    • Sugerido como Resposta Ari C. Raimundo quinta-feira, 10 de dezembro de 2009 01:40
    quinta-feira, 10 de dezembro de 2009 00:44
  • Olá Erysson,

    Por enquanto isso não me ajudou, mas muito obrigado pela resposta! acho q não fui bem claro no que eu queria dizer...

    Eu tenho 1 página com um Calendário, neste calendário ele consulta um XML que eu tenho com Datas e Compromissos agendados.

    Na Hora que eu clico na data que tem algum compromisso, ele leva por QueryString a Data.

    daí na Página CalendarioDatas.aspx eu TINHA uma DataList, acho q não vou precisar mais, pois um amigo meu programador me deu essa dica para não trabalhar com o DataList nesta ocasião que estou precisando. Eu preciso Mostrar a Data Selecionada e a Descrição do Compromisso agendado.

    Daí ele pediu para modificar meu código e fazer assim...

    public partial class CalendarioDatas : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                VincularGrid();
            }
        }
    
        // Cria uma propriedade para armazenar o nome do Arquivo
        private string arquivo
        {
            get
            {
                return Server.MapPath("XML/Calendario.xml");
            }
        }
    
        // Cria um Método para vincular a Grid
        private void VincularGrid()
        {
            try
            {
                if (Request.QueryString["Data"] != null)
                {
                    string _data = Request.QueryString["Data"];
    
                    DataTable table = new DataTable();
                    table.ReadXml(this.arquivo);
                    DataRow row in table.Select("Data='" + Convert.ToDateTime(_data) + "'");
                    dataLabel.Text = Convert.ToString(row["Data"]);
                    descricaoLabel.Text = Convert.ToString(row["Descricao"]);
    
                }
            }
            catch
            {
                //dataLabel.Visible = false;
            }
        }
    }
    

    Até aí tudo bem... mas está ocorrendo alguns erros quando vou compilar.

    Os erros são:

    Error    2    Invalid expression term 'in'
    Error    3    ; expected
    Error    4    ; expected
    Error    5    Only assignment, call, increment, decrement, and new object expressions can be used as a statement

    Ele acusa esses erros na linha:
    DataRow row in table.Select("Data='" + Convert.ToDateTime(_data) + "'");


    Vc sabe como resolve isso? eu acho q já dá certo.

    quinta-feira, 10 de dezembro de 2009 12:11
  • Obrigado pela resposta Danilo, por enquanto ainda não me ajudou...
    quinta-feira, 10 de dezembro de 2009 12:16
  • Fale,

    Coloca o conteúdo do teu XML e um exemplo de data que é repassado. Pois podemos testar aqui.  ;)

    Abraço!
    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    quinta-feira, 10 de dezembro de 2009 12:31
  • Olá Erysson,

    O Conteúdo do meu XML é o seguinte:

    <?xml version="1.0" standalone="yes"?>
    <Agenda_de_Compromissos>
      <Compromissos>
        <Descricao>Início das Ferias Coletivas</Descricao>
        <Data>23/12/2009</Data>
      </Compromissos>
      <Compromissos>
        <Descricao>Natal</Descricao>
        <Data>25/12/2009</Data>
      </Compromissos>
    </Agenda_de_Compromissos>

    na MasterPage q se encontra o meu calendário, com o seguinte código que faz ele carregar as datas...

    public partial class index : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ObterArquivoXML();
            }
        }
    
        private void ObterArquivoXML()
        {
            FileInfo arqXML = new FileInfo(Server.MapPath("XML/Calendario.xml"));
    
            //Verifica a existência do arquivo no path Calendario.XML
            if (arqXML.Exists)
            {
                CarregarDatasAgendadas();
            }
    
            else
            {
                Response.Write("Arquivo Não Existe");
            }
        }
    
        private void CarregarDatasAgendadas()
        {
            //Cria o dataset que irá obter a tabela compromissos
            DataSet dsAgenda = new DataSet();
    
            //Abre o arquivo Calendario.xml e carrega para o dataset
            dsAgenda.ReadXml(Server.MapPath("XML/Calendario.xml"));
    
            //Cria a repetição interagindo com o número de linhas dentro da tabela compromissos
            foreach (DataRow row in dsAgenda.Tables["Compromissos"].Rows)
            {
                Calendario.SelectedDates.Add(Convert.ToDateTime(row["Data"]));
            }
    
        }
    
        protected void Calendario_SelectionChanged(object sender, EventArgs e)
        {
            string url = "CalendarioDatas.aspx?" + "Data=" + Calendario.SelectedDate.ToShortDateString();
            Response.Redirect(url);
        }
    }

    Mais uma vez obrigado!!!
    quinta-feira, 10 de dezembro de 2009 12:39
  • Fale,

    Fiz desse jeito e funcionou.

            string _data = "'25/12/2009'";//Request.QueryString["Data"];
            DataTable table = new DataTable();
            DataSet ds = new DataSet();
            ds.ReadXml(Server.MapPath("XMLFile.xml"));
            ds.Tables[0].DefaultView.RowFilter = "Data=" + _data;
            GridView1.DataSource = ds.Tables[0];
            GridView1.DataBind();


    Abraço!
    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    quinta-feira, 10 de dezembro de 2009 13:10
  • Olá Erysson,

    Deste Jeito dá certo, mas eu preciso pegar a data conforme eu Clicar!!! por QueryString certo???

    pois é um conteudo dinâmico...

    Assim definindo o Valor, carrega perfeitamente, mas preciso pegar por QueryString mesmo, senão não adianta, eu to tentando aki outras coisas...


    Tem alguma outra solução???
    quinta-feira, 10 de dezembro de 2009 13:36
  • Fale,

    Da forma que mostrei foi somente um exemplo direto no código, agora se for query string faz assim:

    string _data = "'" + Request.QueryString["Data"] + "'";
    Abraço!
    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    quinta-feira, 10 de dezembro de 2009 13:46
  • Erysson,

    Muito Obrigado, funcionou perfeitamente!!!


    Abraço...
    quinta-feira, 10 de dezembro de 2009 14:06