2011-03-05 7 views
0

のためのLINQ式を使用:私はこのように見える2つのリストボックスを持っている私の「設定」ダイアログボックスで、カスタムデータ型

+------+ +---------+ 
|File | |Extension| 
|type | |   | 
|  | |   | 
+------+ +---------+ 

私はXMLからロードする必要のあるいくつかのデータを持っているので、私が作りましたそのためのクラス:

public class XmlConfig 
{ 
    public List<config> con = new List<config>(); 
    public XmlConfig(string PathToSettings) 
    { 
     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.Load(PathToSettings); 
     XmlNodeList xmlNodes = xmlDoc.GetElementsByTagName("ext"); 
     foreach (XmlNode xmlnode in xmlNodes)       
      con.Add(new config() 
      { 
       FolderName = xmlnode.Attributes["File"].Value, 
       Extensions = xmlnode.InnerText.Split(',').ToList<string>() 
      }); 
    } 
} 

public struct config 
{ 
    public string FolderName; 
    public List<string> Extensions; 
} 

今私は、XMLファイル内のすべての値でfolderlistboxを埋めるためにしたい、それが正しく起こっているが、問題は、私は、ファイルの種類のリスト項目をクリックしたときに、それはのようになりたいということです対応する拡張子を表示する必要がありますし、私はそれを行う方法については考えていません。誰かがlinqを使用するように示唆していたが、私はそれが何であるか分かりません。

+0

「ファイルタイプのリストアイテムをクリックすると、対応する拡張子を表示する必要がある」ことを明確にすることはできますか? **をクリックして表示**ここで**? btw、これはLINQとはまったく関係ないようです... –

+0

申し訳ありませんが明らかです。最初のリストボックスでファイルタイプリスト項目がクリックされ、対応する拡張子が拡張リストボックスに表示されます。 launchyを使用している場合、そのカタログ設定に行きます。 – voldyman

答えて

1

あなたはfileTypesプロパティのリストビューイベントSelectedValueChangedに加入しなければならないし、そのイベントのハンドラで拡張コレクションをフィルタリングし、私は最終的にそれを行う方法を発見した別のListBox

private void listBox1_SelectedValueChanged(object sender, EventArgs e) 
    { 
     if (listBox1.SelectedItem != null) 
     { 
      //get selected config object 
      config conf = listBox1.SelectedItem as config; 

      //fill extensions listbox 
      listBox2.DataSource = config.Extensions; 
     } 
    } 
+0

申し訳ありませんが、これは動作しません。多分xmlconfigクラスにいくつかの変更を加える必要があります。 – voldyman

+0

あなたがmensionを忘れてしまったので、私はそれを設定しなければならなかったので、私はconfデータ型からリストボックス項目を設定しなければなりませんでした – voldyman

0

に特異的に結合します。 plzは私が間違っている場合、私は

var extn = from ext in configData.con where ext.FolderName == selectVal select ext.Extensions; 

をしていた...この前

private void folderListBox_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      extListBox.Items.Clear(); 
      string selectVal = folderListBox.GetItemText(folderListBox.SelectedItem);    
      //var extn = from ext in configData.con where ext.FolderName == folderListBox.SelectedValue select ext; 
      var extn = from ext in configData.con where ext.FolderName == selectVal select ext; 
      //var result = List 
      foreach (var ext in extn) 
      { 
       foreach (string extension in ext.Extensions) 
        extListBox.Items.Add(extension); 
      }     
     } 

私を修正するが、それは誤りでした。

関連する問題