Letztendlich versuche ich einen Weg zu finden, meine XML-Daten in einer Gridview-Anzeige erfolgreich zu sortieren und zu filtern.Filtern und Sortieren von XML-Daten nach Datum in vb.net
Ich habe eine XML-Blatt wie folgt aus:
<?xml version="1.0" standalone="yes"?>
<Notification>
<Info>
<Event>Template</Event>
<Date>1899/01/01</Date>
</Info>
<Info>
<Event>picnic</Event>
<Date>2016/07/15</Date>
</Info>
<Info>
<Event>party</Event>
<Date>2015/10/29</Date>
</Info>
</Notification>
Dass ich filtern müssen und Art in eine asp.net gridview auf zwei verschiedenen Seiten. Auf einer Seite halte ich eine große Aufzeichnung aller Ereignisse und erlaube das Hinzufügen, Aktualisieren und Löschen von Aufzeichnungen. Die zweite Gridview befindet sich in der Ecke meiner Hauptseite, die aktuelle/kommende Events anzeigen soll. Ich sehe sie wie so (die zweite eine kleinere Größe Dimensionen hat, aber das ist der einzige Unterschied):
<asp:GridView ID="GridView1" runat="server" HeaderStyle-ForeColor="#FF5A09" RowStyle-ForeColor="#FF9900"
AutoGenerateColumns="false" BorderWidth="2px"
Width="1294px" Height="350px" AllowPaging="true"
OnPageIndexChanging="OnPageIndexChanging" AllowSorting="true" >
<Columns >
<asp:BoundField DataField="Event" HeaderText="Event" ItemStyle-Width="150" />
<asp:BoundField DataField="Date" HeaderText="Date" ItemStyle-Width="150" />
<asp:CommandField ShowEditButton="True" ItemStyle-Width="30"/>
<asp:CommandField ShowDeleteButton="True" ItemStyle-Width="30"/>
</Columns>
Ich verwende diese vb.net Funktion meiner XML-Daten zu meinem Gridview zu binden
Private Sub BindGrid()
Dim ds As New DataSet
ds.ReadXml(Server.MapPath("~/Event_Info.xml"))
GridView1.DataSource = ds
GridView1.DataBind()
GridView1.HeaderRow.TableSection = TableRowSection.TableHeader
End Sub
Mein Problem ist, dass, wann immer ich die XML-Daten lese oder versuche es mit Dim doc as XDocument=XDocument.Load("Path to my xml")
zu laden, die eingelesenen Daten sind eine Zeichenfolge in der Datumsspalte, so dass ich sie nur sortieren kann, indem ich mein BindGrid() ändert funktionieren wie folgt:
Dadurch konnte ich sortieren, wenn ich nur das Datum JJJJ/MM/TT eingegeben habe, aber meine Funktionen zum Hinzufügen, Löschen und Aktualisieren funktionierten nicht mehr.
, wenn Sie sie sehen wollen, werde ich sie hier posten, aber könnte man wahrscheinlich dieses Bit überspringen: Die Button_Click hier oben ist für das Hinzufügen eines Datensatzes zu der gridview
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
BindGrid()
Dim oDs As DataSet = GridView1.DataSource
Dim oDr As DataRow = oDs.Tables(0).NewRow
oDr("Event") = TextBox1.Text
oDr("Date") = TextBox2.Text
oDs.Tables(0).Rows.Add(oDr)
oDs.WriteXml(Request.PhysicalApplicationPath + "Event_Info.xml")
BindGrid()
TextBox1.Text = String.Empty
TextBox2.Text = String.Empty
End Sub
Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting
BindGrid()
Dim oDs As DataSet = GridView1.DataSource
oDs.Tables(0).Rows(GridView1.Rows(e.RowIndex).DataItemIndex).Delete()
oDs.WriteXml(Request.PhysicalApplicationPath + "Event_Info.xml")
BindGrid()
End Sub
Protected Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView1.RowEditing
GridView1.EditIndex = e.NewEditIndex
BindGrid()
End Sub
Protected Sub GridView1_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GridView1.RowCancelingEdit
GridView1.EditIndex = -1
BindGrid()
End Sub
Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
' Get the new values from the GridView controls
Dim i As Integer = GridView1.Rows(e.RowIndex).DataItemIndex
Dim n As String = CType(GridView1.Rows(e.RowIndex).Cells(0).Controls(0), TextBox).Text
Dim rn As String = CType(GridView1.Rows(e.RowIndex).Cells(1).Controls(0), TextBox).Text
GridView1.EditIndex = -1
BindGrid()
' Update the XML file using the new values
Dim oDs As DataSet = GridView1.DataSource
oDs.Tables(0).Rows(i).Item(0) = n
oDs.Tables(0).Rows(i).Item(1) = rn
oDs.WriteXml(Request.PhysicalApplicationPath + "Event_Info.xml")
BindGrid()
End Sub
Beenden Sie das Überspringen-Bit
Ich habe auch keine Ahnung, wie Sie die Daten auf der Hauptseite so erfolgreich filtern, dass es nur aktuelle und zukünftige Ereignisse anzeigt. Ich habe versucht, Wege zu finden, eine „where“ -Klausel der Art am Tag anwenden, haben aber
bearbeiten erfolglos gewesen: markiert einen Abschnitt als Code, den ich vergessen haben, als Code
startet durch Schreiben das Schema der xML-Datei, so dass es das Datum als ein tatsächliches Datum enthalten. Dann, wenn Sie die Datei lesen, wird es auch ein Datum sein: oDs.WriteXml (Request.PhysicalApplicationPath + "Event_Info.xml", XmlWriteMode.WriteSchema). Korrigieren Sie auch GridView1_RowUpdating, so dass Sie eine DateTime in die 2. Spalte anstelle einer Zeichenfolge schreiben. Das Textfeld sollte ein String sein, nicht die DataTable oder DGV. – jdweng
@jdweng Danke, das hat mir geholfen, herauszufinden, wie man in ein Schema schreibt, und hat mir einen Schritt bei der Lösung einiger Probleme in diesem Problem erspart. – MacedonZero