Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> DropDownList w celu ograniczenia wyniów XML'a
kepler22b
post 29.05.2015, 20:31:25
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 27.05.2015

Ostrzeżenie: (0%)
-----


Witam,

Proszę o wyjaśnienie lub podesłanie odpowiedniej lektury, gdyż spędziłem 3 dni szukając w google.

Chciałbym za pomocą 2 lub 3 dropdownlist odfiltrować dane XML'a, których wynik będzie wyświetlany w GridView.

np:

mając zbiór książek, wybierając z listy "Fizyka", należy wybrać w kolejnej liście poziom zaawansowania np "średni", w 3 liście np rok wydania.
Po dokonaniu pierwszego wyboru lista w Gridzie powinna się zawężyć, po kolejnym wyborze lista powinna się zawężyć jeszcze bardziej, itd. do dokonania ost. wyboru.

Projekt tworzę w Visual Studio 2008 w XML'u oraz C#

Z góry dziękuje ja wszelkie sugesię.

Ten post edytował kepler22b 29.05.2015, 20:35:24
Go to the top of the page
+Quote Post
Pyton_000
post 30.05.2015, 10:31:15
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Na moje oko słowem kluczowym tutaj będzie XPath.

Mając strukturę XML za pomocą XPath odfiltrujesz sobie dane, musisz go tylko sobie wygenerować doklejając kolejne warunki np.

Kod
/book[@przedmiot="Fizyka"][@poziom="średniozaawansowany"][@rok="2014"]


https://msdn.microsoft.com/en-us/library/ms...ror=-2147217396

Ten post edytował Pyton_000 30.05.2015, 10:34:50
Go to the top of the page
+Quote Post
kepler22b
post 31.05.2015, 07:58:00
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 27.05.2015

Ostrzeżenie: (0%)
-----


Hej, dzieki za odpowiedź.

Zrobiłem małe postępy, niestaty nadal mam pewien problem..
używając poniższego kodu, po wyborze działu: Fizyka dane zostają odfiltrowane, ale po wyborze kolejnej warości z listy: poziom, np. Podstawowy, wartości są wyświetlane dla Poziomu, czyli wybierając poziom Podstawowy pojawiają się wartości dla wielu przedmiotów.
W skrócie wartości są filtrowane po wartościach tylko z jednej kolumny.
Próbowałem kombinować w kodzie List, ale bez rezultatu.

XML
CODE


<?xml version="1.0" encoding="utf-8" ?>

<elementarz>
<ksiazka id="1" dzial="Fizyka">
<poziom>Podstawowy</poziom>
<autor>Jan Kowalski</autor>
<tytul>Fale dzwiekowe</tytul>
<wydawnictwo>Warszawa</wydawnictwo>
<rok>2013</rok>
</ksiazka>

<ksiazka id="2" dzial="Fizyka">
<poziom>Zaawansowany</poziom>
<autor>Jan Zimny</autor>
<tytul>Grawitacja</tytul>
<wydawnictwo>Krakow</wydawnictwo>
<rok>2012</rok>
</ksiazka>

<ksiazka id="3" dzial="Matematyka">
<poziom>Zaawansowany</poziom>
<autor>Piotr Kordus</autor>
<tytul>Pitagoras</tytul>
<wydawnictwo>Poznan</wydawnictwo>
<rok>2010</rok>
</ksiazka>

<ksiazka id="4" dzial="Angielski">
<poziom>Zaawansowany</poziom>
<autor>Piotr Rukat</autor>
<tytul>Easy jezyk</tytul>
<wydawnictwo>Wroclaw</wydawnictwo>
<rok>2010</rok>
</ksiazka>

<ksiazka id="5" dzial="Angielski">
<poziom>Podstawowy</poziom>
<autor>Lukasz Rej</autor>
<tytul>Ucy sie jezyka</tytul>
<wydawnictwo>Gdansk</wydawnictwo>
<rok>2011</rok>
</ksiazka>

<ksiazka id="6" dzial="Angielski">
<poziom>Sredni</poziom>
<autor>Lukasz Rej</autor>
<tytul>Ucy sie jezyka</tytul>
<wydawnictwo>Gdansk</wydawnictwo>
<rok>2011</rok>
</ksiazka>

<ksiazka id="7" dzial="Chemia">
<poziom>Zaawansowany</poziom>
<autor>Ewa Kot</autor>
<tytul>Chemia jest super</tytul>
<wydawnictwo>Wroclaw</wydawnictwo>
<rok>2010</rok>
</ksiazka>

<ksiazka id="8" dzial="Chemia">
<poziom>Podstawowy</poziom>
<autor>Lukasz Rym</autor>
<tytul>Ucy sie chemii</tytul>
<wydawnictwo>Gdansk</wydawnictwo>
<rok>2011</rok>
</ksiazka>

<ksiazka id="9" dzial="Chemia">
<poziom>Sredni</poziom>
<autor>Lech Adamek</autor>
<tytul>Chemia</tytul>
<wydawnictwo>Gdansk</wydawnictwo>
<rok>2011</rok>
</ksiazka>

</elementarz>


CODE
C#

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
public void ZmienTematyke(object sender, EventArgs e)
{
ddlPoziom.SelectedIndex = -1;
string dzial = ddlTematyka.SelectedItem.Value;
if(dzial != string.Empty)
{
XmlDataSource1.XPath = "/elementarz/ksiazka[ @dzial='" + dzial + "']";
}
else
{
XmlDataSource1.XPath = "/elementarz/ksiazka";
}

}
public void ZmienPoziom(object sender, EventArgs e)
{
ddlTematyka.SelectedIndex = -1;
string poziom = ddlPoziom.SelectedItem.Value;
if (poziom != string.Empty)
{

XmlDataSource1.XPath = "/elementarz/ksiazka[][poziom='" + poziom + "']";
}
else
{
XmlDataSource1.XPath = "/elementarz/ksiazka";
}
}
public void ZmienWydawnictwo(object sender, EventArgs e)
{
string wydawnictwo = ddlWydawnictwo.SelectedItem.Value;
if (wydawnictwo != string.Empty)
{
XmlDataSource1.XPath = "/elementarz/ksiazka[ wydawnictwo='" + wydawnictwo + "']";
}
else
{
XmlDataSource1.XPath = "/elementarz/ksiazka";
}
}
}


CODE
ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">

<asp:DropDownList ID="ddlTematyka" runat="server"
OnSelectedIndexChanged="ZmienTematyke" AutoPostBack="True">
<asp:ListItem Text="Tematyka" Value=""/>
<asp:ListItem Text="Angielski" Value="Angielski"/>
<asp:ListItem Text="Chemia" Value="Chemia"/>
<asp:ListItem Text="Matematyka" Value="Matematyka"/>
<asp:ListItem Text="Informatyka" Value="Informatyka"/>
<asp:ListItem Text="Fizyka" Value="Fizyka"/>
</asp:DropDownList>

<asp:DropDownList ID="ddlPoziom" runat="server" OnSelectedIndexChanged="ZmienPoziom" AutoPostBack="true">
<asp:ListItem Text="Poziom" Value=""/>
<asp:ListItem Text="Podstawowy" Value="Podstawowy"/>
<asp:ListItem Text="Sredni" Value="Sredni"/>
<asp:ListItem Text="Zaawansowany" Value="Zaawansowany"/>
</asp:DropDownList>

<asp:DropDownList ID="ddlWydawnictwo" runat="server" OnSelectedIndexChanged="ZmienWydawnictwo" AutoPostBack="true">
<asp:ListItem Text="Wydawnictwo" Value=""/>
<asp:ListItem Text="Krakow" Value="Krakow"/>
<asp:ListItem Text="Wroclaw" Value="Wroclaw"/>
<asp:ListItem Text="Gdansk" Value="Gdansk"/>
</asp:DropDownList>



<p>&nbsp;</p>

<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_Data/ksiazki.xml"></asp:XmlDataSource>



<asp:GridView ID="GridView1" runat="server" XPath="/elementarz/ksiazka" AutoGenerateColumns="False" DataSourceID="XmlDataSource1"> <Columns>



<asp:BoundField DataField="id" HeaderText="id" SortExpression="id" />
<asp:BoundField DataField="dzial" HeaderText="dzial" SortExpression="dzial" HeaderStyle-Width="150"/>



<asp:TemplateField HeaderText="Poziom" HeaderStyle-Width="150"><ItemTemplate>
<%# XPath("poziom")%>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="Autor" HeaderStyle-Width="150"><ItemTemplate>
<%# XPath("autor")%>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="Tytul" HeaderStyle-Width="200"><ItemTemplate>
<%# XPath("tytul")%>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="Wydawnictwo" HeaderStyle-Width="150"><ItemTemplate>
<%# XPath("wydawnictwo")%>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="Rok" HeaderStyle-Width="150"><ItemTemplate>
<%# XPath("rok")%>
</ItemTemplate>
</asp:TemplateField>



</Columns>
</asp:GridView>



</form>


</body>
</html>

Go to the top of the page
+Quote Post
Pyton_000
post 31.05.2015, 09:08:05
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Nie odfiltrowuje bo warunki musisz doklejać do siebie. Ty zaś zamieniasz czyli najpierw masz:
-
Kod
XmlDataSource1.XPath = "/elementarz/ksiazka[ @dzial='" + dzial + "']";


Potem masz:
Kod
XmlDataSource1.XPath = "/elementarz/ksiazka[][poziom='" + poziom + "']";


A powinieneś mieć:

Kod
XmlDataSource1.XPath = "/elementarz/ksiazka[ @dzial='" + dzial + "'][poziom='" + poziom + "']";


Ten post edytował Pyton_000 31.05.2015, 09:08:44
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 19:05