需要使用Linq to XML在Gridview中显示所有xml记录。我需要用于显示xml数据的代码

时间:2012-12-02 20:16:06

标签: c# xml linq

This is XML Document.I want to bind XML data to GridView using Linq to XML .I want data from title_rec element.There are near about 94 records.  :-
  <?xml version="1.0" encoding="UTF-8" ?>
 <dtg>
 <search_header>
 <plant_currency>
 <thru_date>
  <year>2012</year>
  <month>11</month>
  <day>15</day>
  </thru_date>
 <thru_time>
  <hour>05</hour>
  <minute>00</minute>
  <ampm>PM</ampm>
  <timezone>PST</timezone>
  </thru_time>
  </plant_currency>
 <search_date>
  <year>2012</year>
  <month>11</month>
  <day>19</day>
  </search_date>
 <search_time>
  <hour>01</hour>
  <minute>04</minute>
  <ampm>PM</ampm>
  <timezone>PST</timezone>
  </search_time>
  </search_header>
 <search_object type="PROPERTY" outcome="SUCCESS">
 <accepted_param>
 <title_param>
 <property_legal type="TITLE_BY_APN">
 <apn>
  <book>277</book>
  <page>312</page>
  <parcel>003</parcel>
  </apn>
  <QS n="XP" v="XA277}312 003" l="T" />
  </property_legal>
 <from_date>
  <year>1980</year>
  <month>05</month>
  <day>31</day>
  </from_date>
 <thru_date>
  <year>2011</year>
  <month>05</month>
  <day>31</day>
  </thru_date>
  <qualifier extended_names="YES" tt_options="SAP" />
  </title_param>
  </accepted_param>
 <search_unit type="PROPERTY" report_occurrence="01" report_count="03" outcome="SUCCESS">
 <search_param>
 <title_param>
 <property_legal type="TRACT">
 <plat type="TRACT">
 <tract>
  <number>13897</number>
  <id>1</id>
  </tract>
  </plat>
  <lot>85</lot>
 <apn>
  <book>277</book>
  <page>312</page>
  <parcel>003</parcel>
  </apn>
  <QS n="SL" v="T 13897 1$[85" l="L" />
  </property_legal>
 <from_date>
  <year>1980</year>
  <month>05</month>
  <day>31</day>
  </from_date>
 <thru_date>
  <year>2011</year>
  <month>05</month>
  <day>31</day>
  </thru_date>
  <qualifier extended_names="YES" tt_options="SAP" />
  </title_param>
  </search_param>
 <filters>
 <filter type="SORT">
 <path collate="ASCENDING">datatrace/response/search_group/search_object/search_unit/title_report/title_rec/date</path>
  </filter>
  </filters>
  <search_desc command="T" type="Tract" short="L:85 T:138971" long="Lot: 85 Tract: 138971" />
 <title_report record_count="91">
 <property_legal type="TRACT">
 <plat type="TRACT">
 <tract>
  <number>13897</number>
  <id>1</id>
  </tract>
  </plat>
  <lot>85</lot>
  <QS n="SL" v="T 13897 1$[85" l="L" />
  <message>PLAT HAS NOT BEEN VERIFIED</message>
  </property_legal>
  <section_index section_id="1" />
 <title_rec section_id="1">
 <date>
  <year>1980</year>
  <month>11</month>
  <day>03</day>
  </date>
  <seq>1</seq>
 <base>
 <base_date>
  <year>1980</year>
  <month>11</month>
  <day>03</day>
  </base_date>
 <property>
 <property_legal type="TRACT">
 <plat type="TRACT">
 <tract>
  <number>13897</number>
  <id>1</id>
  </tract>
  </plat>
  <lot>85</lot>
  <QS n="SL" v="T 13897 1$[85" l="L" />
  </property_legal>
  </property>
 <company>
  <number>08</number>
  </company>
 <order>
  <number>0052337</number>
  <tof>04</tof>
  </order>
 <inst>
  <type>SR</type>
 <recorded>
  <year>1980</year>
  <month>11</month>
  <day>03</day>
  </recorded>
 <posted>
  <year>1980</year>
  <month>11</month>
  <day>03</day>
  </posted>
  </inst>
  </base>
  </title_rec>
 <title_rec section_id="1">
 <date>
  <year>1980</year>
  <month>11</month>
  <day>10</day>
  </date>
  <seq>2</seq>
 <base>
 <base_date>
  <year>1980</year>
  <month>11</month>
  <day>10</day>
  </base_date>
 <property>
 <property_legal type="TRACT">
 <plat type="TRACT">
 <tract>
  <number>13897</number>
  <id>1</id>
  </tract>
  </plat>
  <lot>85</lot>
  <QS n="SL" v="T 13897 1$[85" l="L" />
  </property_legal>
  </property>
 <company>
  <number>08</number>
  </company>
 <order>
  <number>0052337</number>
  <tof>04</tof>
  </order>
 <inst>
  <type>SR</type>
 <recorded>
  <year>1980</year>
  <month>11</month>
  <day>10</day>
  </recorded>
 <posted>
  <year>1980</year>
  <month>11</month>
  <day>10</day>
  </posted>
  </inst>
  </base>
  </title_rec>
 <title_rec section_id="1">
 <date>
  <year>1980</year>
  <month>11</month>
  <day>13</day>
  </date>
  <seq>3</seq>
 <base>
 <base_date>
 <year>1980</year>
  <month>11</month>
 <day>13</day>
  </base_date>
 <property>
 <property_legal type="TRACT">
 <plat type="TRACT">
 <tract>
  <number>13897</number>
  <id>1</id>
  </tract>
  </plat>
  <lot>85</lot>
  <QS n="SL" v="T 13897 1$[85" l="L" />
  </property_legal>
  </property>
 <company>
  <number>08</number>
  </company>
 <order>
  <number>0052600</number>
  <tof>04</tof>
  </order>
 <inst>
  <type>SR</type>
 <recorded>
  <year>1980</year>
  <month>11</month>
  <day>13</day>
  </recorded>
 <posted>
  <year>1980</year>
  <month>11</month>
  <day>13</day>
  </posted>
  </inst>
  </base>
  </title_rec>
 <title_rec section_id="1">
 <date>
  <year>1980</year>
  <month>11</month>
  <day>25</day>
  </date>
  <seq>4</seq>
 <title_doc>
 <property>
 <property_legal type="TRACT">
<plat type="TRACT">
 <tract>
  <number>13897</number>
  <id>1</id>
  </tract>
  </plat>
  <lot>85</lot>
  <QS n="SL" v="T 13897 1$[85" l="L" />
  </property_legal>
  </property>
 <inst>
  <year>1980</year>
  <number>220434</number>
  <type>RL</type>
 <recorded>
  <year>1980</year>
  <month>11</month>
  <day>25</day>
  </recorded>
 <posted>
  <year>1980</year>
  <month>11</month>
  <day>25</day>
  </posted>
 <image provider="DATA_TREE" county_fips="065" document_id_desc="DocumentYear.DocID">
 <image_params document_type="DAILY_DOCUMENT" index_type="YEAR.DOCID" document_index_id="16">
  <description>1980.220434</description>
  </image_params>
  </image>
  <QS n="IN" v="Y1980220434" l="B" />
  </inst>
 <party_info>
 <party role="GRANTOR">
  <name>RECORD OWNER</name>
  <QS n="GN" v="RECORD OWNER" l="N" />
  </party>
  </party_info>
 <remarks>
  <len>9</len>
  <text>80 139134</text>
  </remarks>
  </title_doc>
  </title_rec>
  </title_report>
 <commentary>
 <comment>
  <text>ADJOINING PROPERTY SEARCH SUPPRESSED</text>
  </comment>
 <comment>
  <text>ALL TRACT SEARCH SUPPRESSED</text>
  </comment>
  </commentary>
  </search_unit>
  </search_object>
  </dtg>

我创建了类TitleByApn&amp;将Linq写入XML查询以解析xml数据。请查找下面的类详细信息和返回查询输出的代码。请使用此代码,或者如果您可以为我提供其他具有不同逻辑的代码也可以。

public class TitleByApn
{
 private string grantor;
 private string grantee;
 private string doctype;
 private string instrument;
 private string month;
 private string  day;
 private string  year;
 private string remarks;

 public string _grantor
{  get { return grantor; }
}

public string _grantee
{
 get {return grantee ;}
}

public string _month
{
 get {return month; }
}

public string _day
{
 get {return day; }
}

public string _year
{
 get { return year; }
} 

public string _doctype
{
get{ return doctype; }
}

public string  _remarks
{
get {return remarks;}
}

public string  _instrument
{
get {return instrument; }
}

public static List<TitleByApn> GetTitle()


        {

            List<TitleByApn> output = new List<TitleByApn>();
            string filepath = @"C:/Title.xml";

            //XElement xdoc = new XElement();

              XElement xdoc =   XElement.Load(filepath);

            //XElement xElement = XElement.Parse(filepath);

            //var query = from b in xdoc.Descendants("title_doc")
            //            select b.Value;

            //string query = (from b in xdoc.Descendants("title_doc")
            //                select b.Value).FirstOrDefault();

            int i = 0;
            string s1 = "";
            string inst = "";
            //string s2 = "";
            //string s3 = "";
            //string s4 = "";
            var authorList = xdoc.Descendants("title_doc").Select(x => x.Value).ToList();
            foreach (string item in authorList)
            {


                     string Month = (from o in xdoc.Descendants("title_doc").Descendants("recorded")
                                 select o.Element("month").Value).First();

                string Day = (from o in xdoc.Descendants("title_doc").Descendants("recorded")
                               select o.Element("day").Value).First();

                string Year = (from o in xdoc.Descendants("title_doc").Descendants("recorded")
                                select o.Element("year").Value).First();

                string granTor = (from o in xdoc.Descendants("title_doc").Descendants("party_info").Descendants("party")
                                   where o.Attribute("role").Value == "GRANTOR"
                                  select o.Element("name").Value).FirstOrDefault();
                ////select new Instrument()

                ////{
                ////    Grantor = (string)o.Element("name")

                ////};

                string granTee = (from o in xdoc.Descendants("title_doc").Descendants("party_info").Descendants("party")
                                   where o.Attribute("role").Value == "GRANTEE"
                                  select o.Element("name").Value).First();

                string Doctype =(from o in xdoc.Descendants("title_doc").Descendants("inst")
                                   select o.Element("type").Value).First();

                 string instNo = (from o in xdoc.Descendants("title_doc").Descendants("inst")
                                   select o.Element("number").Value).First();

                  string REmarks = (from o in xdoc.Descendants("title_doc").Descendants("remarks")
                                   select o.Element("text").Value).First();

               output.Add(new TitleByApn(granTor, granTee, Month, Day, Year,instNo, Doctype, REmarks));


                }


            return output;
             } 

}

This is the code responsible to bind the class to gridview:
GridView1.DataSource = TitleByApn.GetTitle();
            GridView1.DataBind();


I know because of FirstOrDefault() only first record is displaying in gridview.
I want code to display all the records in gridview.
Please help me ASAP.
Thanks in advance.

1 个答案:

答案 0 :(得分:0)

根据您问题的内容,听起来您已经解析了XML并将其放入上面创建的类中。在Codeplex上发现的本教程标题为“A Detailed Data Binding Tutorial ”,详细介绍了如何将类绑定到带有访问修饰符的DataGridView等等。

基本上,一旦创建了GridView,就可以将BindingSource对象添加到它的数据项中,并简单地添加XML类信息:

private void Form1_Load(object sender, EventArgs e)
{
 airplaneBindingSource.Add(new Airplane("Boeing 747", 800));
  airplaneBindingSource.Add(new Airplane("Airbus A380", 1023));
  airplaneBindingSource.Add(new Airplane("Cessna 162", 67));
}