- これを行うためにC#を使用しています。
OK、これが私の XML ファイルの外観です... AUCCars ノードが非常に多いだけです。
<Recordset> <AUCCars> <Web_Series>5 Series</Web_Series> <Body_Desc>Sedan</Body_Desc> <Model_Type>550i (E60)</Model_Type> <Model_Year>2006</Model_Year> <Ext_Colour>Alpine White III - Non-Metallic</Ext_Colour> <Int_Colour>Leather Dakota Black - Dakota Leather</Int_Colour> <Price>R 579000</Price> <Search_Price>579000</Search_Price> <Province>Gauteng</Province> <AucID>106288</AucID> <DealerID>45</DealerID> <DealerCode>29968</DealerCode> <DealerName>Lyndhurst Auto</DealerName> <Transmission>Automatic</Transmission> <AirCon>n/a</AirCon> <Radio>Yes</Radio> <PSteering>Yes</PSteering> <ABS>Yes</ABS> <Airbag>Yes</Airbag> <Sunroof>Yes</Sunroof> <Km>11500</Km> <Motorplan>Yes</Motorplan> <Warranty>N</Warranty> <BodyNo>6CR76051</BodyNo> <ModelOEM>NB52</ModelOEM> <ColourOEM>300</ColourOEM> <TrimOEM>LCSW</TrimOEM> <WheelsOEM></WheelsOEM> <Sold>N</Sold> <Notes> </Notes> <Moreoptions>Automatic Transmission with Steptronic Interior trim finishers, Fine-wood, Poplar Grain Brown, high-gloss Park Distance Control (PDC),front and rear</Moreoptions> <Picture>\Vehicle_Pictures\E60\LI\frontview_big_P0300.jpg</Picture> <PictureRear>\Vehicle_Pictures\E60\LI\rearview_big_P0300.jpg</PictureRear> <Interior>\Vehicle_Pictures\E60\LI\Interior\big_Fo_LCSW.jpg</Interior> </AUCCars> <AUCCars> <Web_Series>5 Series</Web_Series> <Body_Desc>Sedan</Body_Desc> <Model_Type>550i (E60)</Model_Type> <Model_Year>2006</Model_Year> <Ext_Colour>Black Sapphire - Metallic</Ext_Colour> <Int_Colour>Amethyst Black Exclusive Leather - Exclusive Leather</Int_Colour> <Price>R 529990</Price> <Search_Price>529990</Search_Price> <Province>KwaZulu Natal</Province> <AucID>111922</AucID> <DealerID>17</DealerID> <DealerCode>2485</DealerCode> <DealerName>Supertech</DealerName> <Transmission>Automatic</Transmission> <AirCon> Yes</AirCon> <Radio>Yes</Radio> <PSteering>Yes</PSteering> <ABS>Yes</ABS> <Airbag>Yes</Airbag> <Sunroof>n/a</Sunroof> <Km>7000</Km> <Motorplan>n/a</Motorplan> <Warranty>N</Warranty> <BodyNo>6CR75567</BodyNo> <ModelOEM>NB52</ModelOEM> <ColourOEM>475</ColourOEM> <TrimOEM>LDRH</TrimOEM> <WheelsOEM></WheelsOEM> <Sold>N</Sold> <Notes> </Notes> <Moreoptions>Automatic Transmission with Steptronic Electric Rear Screen Roller Sun Blind with manual Side Blinds Interior trim finishers, Fine-wood, Poplar Grain Brown, high-gloss High Beam Assist Head-up display (not with SA354)</Moreoptions> <Picture>\Vehicle_Pictures\E60\LI\frontview_big_P0475.jpg</Picture> <PictureRear>\Vehicle_Pictures\E60\LI\rearview_big_P0475.jpg</PictureRear> <Interior>\Vehicle_Pictures\E60\LI\Interior\big_Fo_LDRH.jpg</Interior> </AUCCars> <Recordset>
Series、Model、Year のコンボ ボックスに入力する必要があります。
- これで正解。プログラムをコンパイルすると、すべてのシリーズがシリーズにロードされます
- コンボボックス。
- シリーズを選択すると、すべてのモデルがモデル コンボに自動的に読み込まれます
箱。モデルを選択すると、それに応じて年が自動的に読み込まれます。
次に、選択に従ってデータを表示する必要があります。
例えば。シリーズコンボボックスは「5 Series」、モデルコンボボックスは「550i(E60)」、年式コンボボックスは「2006」を選択しました。
13. 選択に従って、その特定のノードのすべてのデータをリスト ボックスに表示するにはどうすればよいですか?
質問する
170 次
1 に答える
1
正しく理解できていれば幸いです...小さなサンプル フォームを作成しました。コンボボックスのSelectedIndexChangedで、フィルタリングされた aucCarsを表示します。ComboBoxes は、問題の特定の詳細に従ってxml ファイルからデータを取得します(Web_Series, Model_Type, Model_Year - distinct)
// get data from file
XElement aucCars = XElement.Load("data.xml");
private void cmbSeries_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbSeries.SelectedItem != null)
{
string currentSeries = cmbSeries.SelectedItem.ToString();
var models = (from a in aucCars.Elements()
where a.Element("Web_Series").Value == currentSeries
select a.Element("Model_Type").Value).Distinct().ToList();
cmbModel.DataSource = models;
}
showAucCars();
}
private void cmbModel_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbModel.SelectedItem != null)
{
string currentSeries = cmbSeries.SelectedItem.ToString();
string currentModel = cmbModel.SelectedItem.ToString();
var years = (from a in aucCars.Elements()
where a.Element("Web_Series").Value == currentSeries &&
a.Element("Model_Type").Value == currentModel
select a.Element("Model_Year").Value).Distinct().ToList();
cmbYear.DataSource = years;
}
showAucCars();
}
private void cmbYear_SelectedIndexChanged(object sender, EventArgs e)
{
showAucCars();
}
private void frmXmlLoad_Load(object sender, EventArgs e)
{
var series = (from a in aucCars.Elements()
select a.Element("Web_Series").Value).Distinct().ToList();
cmbSeries.DataSource = series;
}
private void showAucCars()
{
var filterCars = aucCars.Elements();
if (cmbSeries.SelectedItem!=null)
{
string currentSeries = cmbSeries.SelectedItem.ToString();
filterCars = from a in filterCars
where a.Element("Web_Series").Value == currentSeries
select a;
}
if (cmbSeries.SelectedItem != null)
{
string currentModel = cmbModel.SelectedItem.ToString();
filterCars = from a in filterCars
where a.Element("Model_Type").Value == currentModel
select a;
}
if (cmbSeries.SelectedItem != null)
{
string currentYear = cmbYear.SelectedItem.ToString();
filterCars = from a in filterCars
where a.Element("Model_Year").Value == currentYear
select a;
}
// will show all the element data
// add a new linq stmt to select specific elements
listBox1.DataSource = filterCars.ToList();
}
内部では、comboBoxesでの選択に従ってフィルタリングし、結果を listBox に表示しますshowAucCars()
。リストボックスに特定の要素を表示する場合は、新しい linq stmt を追加し、対応する要素を選択します。
于 2012-09-23T08:39:45.880 に答える