DropDownList w celu ograniczenia wyniów XML'a |
DropDownList w celu ograniczenia wyniów XML'a |
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 |
|
|
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 |
|
|
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> </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> |
|
|
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 |
|
|
Wersja Lo-Fi | Aktualny czas: 11.11.2024 - 22:33 |