2017-03-15 30 views
0

ASP.NET Framework 4.5.2(Visual Studio 2013)でシンプルなWebアプリケーションを作成しようとしています。 XMLファイルからコンテンツを読み込み、コンテンツをスキーマに検証し、default.aspxページに表示し、後でこれらのコンテンツを編集し、XMLファイルに変更を書き込むためのボタンを追加したいとします。私が持っている問題は、リストビューのコンテンツをどのように表示するのか把握できないことです(私の検索によれば、コントロールの適切な選択です)。 Page_LoadメソッドでDefault.aspx.csでASP.NETページにXMLコンテンツを表示

、(これはそれのための右の場所で?)、私は次のことを行っている:

XDocument document = XDocument.Load(AppDomain.CurrentDomain.BaseDirectory + "/App_Data/orders.xml"); 
     XmlSchemaSet schemas = new XmlSchemaSet(); 
     schemas.Add("", XmlReader.Create(AppDomain.CurrentDomain.BaseDirectory + "/App_Data/orderschema.xsd")); 
     bool errors = false; 

     document.Validate(schemas, (o, err) => 
     { 
      System.Diagnostics.Debug.WriteLine("Validation error: {0}", err.Message); 
      errors = true; 
     }); 

     if (!errors) 
     { 
      System.Diagnostics.Debug.WriteLine("XML document successfully validated."); 

     } 
     else 
     { 
      System.Diagnostics.Debug.WriteLine("XML document does not validate."); 
     } 

これは正常に動作するようです。ロードされたドキュメントは正常に検証されたようですが、XMLでエラーが発生した場合、検証は失敗します。

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

<shiporder orderid="889923"> 
    <orderperson>John Smith</orderperson> 
    <shipto> 
    <name>Ola Nordmann</name> 
    <address>Langgt 23</address> 
    <city>4000 Stavanger</city> 
    <country>Norway</country> 
    </shipto> 
    <item> 
    <title>Empire Burlesque</title> 
    <note>Special Edition</note> 
    <quantity>1</quantity> 
    <price>10.90</price> 
    </item> 
    <item> 
    <title>Hide your heart</title> 
    <quantity>1</quantity> 
    <!--Change to "one" to see validation error--> 
    <price>9.90</price> 
    </item> 
</shiporder> 

あなたはそれがオーダーを含んで見ることができるように、それは可能性が高いタグ内のより多くの注文が含まれています:

XMLファイルには、次のようになります。

スキーマは次のようになります。

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="shiporder"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="orderperson" type="xs:string"/> 
     <xs:element name="shipto"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="name" type="xs:string"/> 
       <xs:element name="address" type="xs:string"/> 
       <xs:element name="city" type="xs:string"/> 
       <xs:element name="country" type="xs:string"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="item" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="title" type="xs:string"/> 
       <xs:element name="note" type="xs:string" minOccurs="0"/> 
       <xs:element name="quantity" type="xs:positiveInteger"/> 
       <xs:element name="price" type="xs:decimal"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
     <xs:attribute name="orderid" type="xs:string" use="required"/> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

は最後に、私は、リストビューコントロールを作成し、管理する方法を検索しようとしましたが、正確な何かを見つけることができません。 Populate ListView from XML file しかし、それは勝つフォームについてですので、私の場合には動作していないよう:私は、例えばこれを見つけました。私はたくさんの異なることを試しましたが、理解できないようです。私のDefault.aspxは今、この権利のように見える

:あなたが見ることができるように

<%@ Page Title="Test" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server"> 

    <div class="jumbotron"> 
     <h2>Orders</h2> 
     <p>Showing orders from XML-file</p> 

     <asp:ListView ID="listViewOrders" DataSourceID="listViewOrders" runat="server"> 

     </asp:ListView> 
     <asp:Table ID="Table1" runat="server"></asp:Table> 

    </div> 

</asp:Content> 

、私は(https://msdn.microsoft.com/en-us/library/bb398790.aspx#Code例)MSDNに推奨されているように、ListViewコントロール内のプロパティDataSourceIDを設定しようとしたしかし、私は知りませんMSDNで見つけたコード例のようにC#コードで使用する方法は、SQLデータベースの使用方法を参照してください。

長いポスト申し訳ありませんし、何かが不明であるか、私には明らかであるならば、私に知らせてください。私はWebアプリケーションプログラミングの中であまり経験していないので、私は単純な解決策を模索しています。前もって感謝します!

答えて

0

は、データセット構文の下に使用してにあなたのXMLに変換します。

DataSet testdataset = new DataSet(); 
testdataset.ReadXml("InputXmlAsString/FilePath/etc...."); 

その後、

+0

あなたListViewControl IDが「listViewOrders」のデータソースとしてこのデータセット/データテーブルを割り当てるには、ご回答ニキルいただきありがとうございます!これは面白い。私は実際にDataSetの作成とReadXmlの使用を試みましたが、XSDファイルを使用してDataSetを検証できるようには見えませんでした。私がXDocumentデータ型を提示したのと同様の方法でコンテンツを検証する方法があるかどうか教えてください。私は実際にこれに対する解決策を探してみました。 { "listviewcontrolのデータソースとして設定データセット" } –

+0

場合(!エラー) 他 Nikkhil.Patel @ –

+0

{ エラーメッセージ でデータセットを作成するには}あなたがたくさんありがとう!今それは動作します。私は、私が必要とすることを完全に行うためにLayoutTemplate、ItemTemplate、およびEditTemplateを作成する必要があることも発見しました。 しかし、私は間違いなく非常にうまく受信した単純な解決策を求めましたが、ファイルが2回読み込まれるため、この方法はあまり効率的ではないと思いますか?たぶん、ファイルが非常に大きい場合は、一度でもファイル全体をメモリにロードするのは悪い考えです。 –

関連する問題