-1
  1. これを行うためにC#を使用しています。
  2. 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>
    
  3. Series、Model、Year のコンボ ボックスに入力する必要があります。

  4. これで正解。プログラムをコンパイルすると、すべてのシリーズがシリーズにロードされます
  5. コンボボックス。
  6. シリーズを選択すると、すべてのモデルがモデル コンボに自動的に読み込まれます
  7. 箱。モデルを選択すると、それに応じて年が自動的に読み込まれます。

  8. 次に、選択に従ってデータを表示する必要があります。

  9. 例えば。シリーズコンボボックスは「5 Series」、モデルコンボボックスは「550i(E60)」、年式コンボボックスは「2006」を選択しました。

  10. 13. 選択に従って、その特定のノードのすべてのデータをリスト ボックスに表示するにはどうすればよいですか?

4

1 に答える 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 に答える