几周前我刚刚开始学习Visual Studio,一切都在我脑海中。你能给我一份我用来格式化日期栏和价格栏的代码吗?我似乎也没有得到gridview来显示复选框。我被困了。我正在使用visual studio 2008,并希望从xml文件中提取ROOM_COST, DATE_TO, ROOM_TYPE, LOCATION, SMOKING, RESTAURANT AND NO_OF_PEOPLE COLUMNS
。用户现在应该能够选择满足其要求的用户。这是我的xml文件和我的linq到xml查询的副本。
<?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();
提前致谢。
答案 0 :(得分:0)
这将为您提供一个具有强类型值的对象,允许格式化:
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")
};
此外,我建议先解析并验证用户输入,然后将查询更改为:
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")
创建一个名为“numberOfPeople”的变量并将输入解析为,与“dateNeeded”相同,警告用户他们的输入是否无法解析...不想用一些奇怪的Linq到Xml呈现它们错误:)