views:

45

answers:

1

I just started learning Visual Studio a couple of weeks ago and everything is way over my head. Can you please give me a copy of the code I'd use to format both a date column and a price column? I am also not seem to be getting the gridview to show the checkbox. I'm stuck pls help. I am using visual studio 2008 and would want to pull out ROOM_COST, DATE_TO, ROOM_TYPE, LOCATION, SMOKING, RESTAURANT AND NO_OF_PEOPLE COLUMNS from the xml file. A user should now be able to select which ever meets their requirements. Here's a copy of my xml file and my linq to xml query.

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Table">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="ROOM_ID" msprop:OraDbType="111" type="xs:short" minOccurs="0" />
                <xs:element name="SMOKING" msprop:OraDbType="126" type="xs:string" minOccurs="0" />
                <xs:element name="NO_OF_PEOPLE" msprop:OraDbType="111" type="xs:short" minOccurs="0" />
                <xs:element name="ROOM_COST" msprop:OraDbType="108" type="xs:double" minOccurs="0" />
                <xs:element name="ROOM_TYPE" msprop:OraDbType="126" type="xs:string" minOccurs="0" />
                <xs:element name="ROOM_DESC" msprop:OraDbType="126" type="xs:string" minOccurs="0" />
                <xs:element name="BOOKING_ID" msprop:OraDbType="111" type="xs:short" minOccurs="0" />
                <xs:element name="DATE_FROM" msprop:OraDbType="106" type="xs:dateTime" minOccurs="0" />
                <xs:element name="DATE_TO" msprop:OraDbType="106" type="xs:dateTime" minOccurs="0" />
                <xs:element name="HOTEL_AREA" msprop:OraDbType="126" type="xs:string" minOccurs="0" />
                <xs:element name="HOTEL_NAME" msprop:OraDbType="126" type="xs:string" minOccurs="0" />
                <xs:element name="RESTAURANT" msprop:OraDbType="126" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <Table>
    <ROOM_ID>101</ROOM_ID>
    <SMOKING>N</SMOKING>
    <NO_OF_PEOPLE>1</NO_OF_PEOPLE>
    <ROOM_COST>29.990000000000002</ROOM_COST>
    <ROOM_TYPE>SINGLE ROOM</ROOM_TYPE>
    <ROOM_DESC>ONE BED, MIRROR, DESK, COUCH</ROOM_DESC>
    <BOOKING_ID>300</BOOKING_ID>
    <DATE_FROM>2008-01-02T00:00:00+00:00</DATE_FROM>
    <DATE_TO>2008-01-04T00:00:00+00:00</DATE_TO>
    <HOTEL_AREA>WOLVERHAMPTON</HOTEL_AREA>
    <HOTEL_NAME>LEVELS</HOTEL_NAME>
    <RESTAURANT>N</RESTAURANT>
  </Table>
  <Table>
    <ROOM_ID>105</ROOM_ID>
    <SMOKING>Y</SMOKING>
    <NO_OF_PEOPLE>4</NO_OF_PEOPLE>
    <ROOM_COST>59.99</ROOM_COST>
    <ROOM_TYPE>EN-SUITE</ROOM_TYPE>
    <ROOM_DESC>KINGSIZE BED, MIRROR, GARDEN</ROOM_DESC>
    <BOOKING_ID>301</BOOKING_ID>
    <DATE_FROM>2009-01-02T00:00:00+00:00</DATE_FROM>
    <DATE_TO>2009-01-15T00:00:00+00:00</DATE_TO>
    <HOTEL_AREA>STAFFORD</HOTEL_AREA>
    <HOTEL_NAME>HILTON</HOTEL_NAME>
    <RESTAURANT>Y</RESTAURANT>
  </Table>
  <Table>
    <ROOM_ID>111</ROOM_ID>
    <SMOKING>N</SMOKING>
    <NO_OF_PEOPLE>10</NO_OF_PEOPLE>
    <ROOM_COST>49.99</ROOM_COST>
    <ROOM_TYPE>HOSTEL ROOM</ROOM_TYPE>
    <ROOM_DESC>DOUBLE-DECKER BED, DRAWER</ROOM_DESC>
    <BOOKING_ID>302</BOOKING_ID>
    <DATE_FROM>2009-03-02T00:00:00+00:00</DATE_FROM>
    <DATE_TO>2009-06-15T00:00:00+01:00</DATE_TO>
    <HOTEL_AREA>WOLVERHAMPTON</HOTEL_AREA>
    <HOTEL_NAME>LEVELS</HOTEL_NAME>
    <RESTAURANT>N</RESTAURANT>
  </Table>
  <Table>
    <ROOM_ID>113</ROOM_ID>
    <SMOKING>N</SMOKING>
    <NO_OF_PEOPLE>1</NO_OF_PEOPLE>
    <ROOM_COST>29.990000000000002</ROOM_COST>
    <ROOM_TYPE>SINGLE ROOM</ROOM_TYPE>
    <ROOM_DESC>ONE BED, MIRROR, DESK, COUCH</ROOM_DESC>
    <BOOKING_ID>303</BOOKING_ID>
    <DATE_FROM>2009-09-02T00:00:00+01:00</DATE_FROM>
    <DATE_TO>2009-09-05T00:00:00+01:00</DATE_TO>
    <HOTEL_AREA>BASWICH</HOTEL_AREA>
    <HOTEL_NAME>DAYSTAR</HOTEL_NAME>
    <RESTAURANT>Y</RESTAURANT>
  </Table>
  <Table>
    <ROOM_ID>103</ROOM_ID>
    <SMOKING>Y</SMOKING>
    <NO_OF_PEOPLE>2</NO_OF_PEOPLE>
    <ROOM_COST>39.99</ROOM_COST>
    <ROOM_TYPE>DOUBLE ROOM</ROOM_TYPE>
    <ROOM_DESC>DOUBLE BED, MIRROR, SEETEE</ROOM_DESC>
    <BOOKING_ID>304</BOOKING_ID>
    <DATE_FROM>2009-08-21T00:00:00+01:00</DATE_FROM>
    <DATE_TO>2009-08-25T00:00:00+01:00</DATE_TO>
    <HOTEL_AREA>CANNOCK</HOTEL_AREA>
    <HOTEL_NAME>MIDAS</HOTEL_NAME>
    <RESTAURANT>N</RESTAURANT>
  </Table>
  <Table>
    <ROOM_ID>107</ROOM_ID>
    <SMOKING>Y</SMOKING>
    <NO_OF_PEOPLE>10</NO_OF_PEOPLE>
    <ROOM_COST>49.99</ROOM_COST>
    <ROOM_TYPE>HOSTEL ROOM</ROOM_TYPE>
    <ROOM_DESC>DOUBLE-DECKER BED, DRAWER</ROOM_DESC>
    <BOOKING_ID>305</BOOKING_ID>
    <DATE_FROM>2009-08-25T00:00:00+01:00</DATE_FROM>
    <DATE_TO>2009-08-31T00:00:00+01:00</DATE_TO>
    <HOTEL_AREA>STOKE</HOTEL_AREA>
    <HOTEL_NAME>MIVI</HOTEL_NAME>
    <RESTAURANT>Y</RESTAURANT>
  </Table>
  <Table>
    <ROOM_ID>141</ROOM_ID>
    <SMOKING>N</SMOKING>
    <NO_OF_PEOPLE>2</NO_OF_PEOPLE>
    <ROOM_COST>39.99</ROOM_COST>
    <ROOM_TYPE>DOUBLE ROOM</ROOM_TYPE>
    <ROOM_DESC>DOUBLE BED, MIRROR, SEETEE</ROOM_DESC>
    <HOTEL_AREA>BASWICH</HOTEL_AREA>
    <HOTEL_NAME>DAYSTAR</HOTEL_NAME>
    <RESTAURANT>Y</RESTAURANT>
  </Table>
  <Table>
    <ROOM_ID>109</ROOM_ID>
    <SMOKING>Y</SMOKING>
    <NO_OF_PEOPLE>1</NO_OF_PEOPLE>
    <ROOM_COST>19.990000000000002</ROOM_COST>
    <ROOM_TYPE>BED-SIT</ROOM_TYPE>
    <ROOM_DESC>ONE BED, DESK</ROOM_DESC>
    <HOTEL_AREA>CANNOCK</HOTEL_AREA>
    <HOTEL_NAME>MIDAS</HOTEL_NAME>
    <RESTAURANT>N</RESTAURANT>
  </Table>
</NewDataSet>

XDocument xmlDoc = XDocument.Load(Server.MapPath("xml/data1.xml"));

        var hotels = from hotel in xmlDoc.Descendants("Table")
                     where Double.Parse(pplTextBox.Text) <= Double.Parse(hotel.Element("NO_OF_PEOPLE").Value)
                     //&& DateTime.Parse(DateTextFrom.Text)>DateTime.Parse(hotel.Element("DATE_TO").Value)
                     select new
                     {
                         RoomCost = hotel.Element("ROOM_COST").Value,
                         RoomType = hotel.Element("ROOM_TYPE").Value,
                         Hotel = hotel.Element("HOTEL_NAME").Value,
                         NoOfGuest = hotel.Element("NO_OF_PEOPLE").Value,
                         Smoking = hotel.Element("SMOKING").Value,
                         Restaurant = hotel.Element("RESTAURANT").Value,
                         Location = hotel.Element("HOTEL_AREA").Value,
                         AvailableDate = hotel.Element("DATE_TO").Value

                     };


        GridView1.DataSource = hotels.ToList();

        GridView1.DataBind();

Thanks in advance.

A: 

This will give you an object with strongly typed values allowing for formatting:

select new { 
    RoomCost = (decimal)hotel.Element("ROOM_COST"), 
    RoomType = (string)hotel.Element("ROOM_TYPE"), 
    Hotel = (string)hotel.Element("HOTEL_NAME"), 
    NoOfGuest = (int)hotel.Element("NO_OF_PEOPLE"), 
    Smoking = ( hotel.Element("SMOKING").Value == "Y" ), 
    Restaurant = ( hotel.Element("RESTAURANT").Value == "Y" ), 
    Location = (string)hotel.Element("HOTEL_AREA"), 
    AvailableDate = (DateTime)hotel.Element("DATE_TO")
};

Also I would suggest parsing and validating user input first then changing your query to this:

var query = from hotel in data.Descendants("Table")
            where numberOfPeople <= (double)hotel.Element("NO_OF_PEOPLE")
            && dateNeeded > (DateTime)hotel.Element("DATE_FROM")
            && dateNeeded < (DateTime)hotel.Element("DATE_TO")

Create a variable named "numberOfPeople" and parse the input into that, same with "dateNeeded", warning the user if their input couldn't be parsed... don't want to present them with some odd Linq to Xml error :)

Timothy Walters