Usuário com melhor resposta
Filtrar dados do XML por QueryString

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???
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!- Marcado como Resposta Júlio Gonçalves de Oliveira quinta-feira, 10 de dezembro de 2009 14:05
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! -
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
-
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.
-
-
-
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!!! -
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! -
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??? -
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!- Marcado como Resposta Júlio Gonçalves de Oliveira quinta-feira, 10 de dezembro de 2009 14:05
-