2011-03-05 29 views
0

在我的“设置”对话框中,我有两个列表框,看起来像这样:使用LINQ表达式自定义数据类型

+------+ +---------+ 
|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,但由于我是新来的C#我不知道它是什么。

+0

你能澄清一下:“当文件类型列表项被点击时,应该显示相应的扩展名”?点击**哪里**和显示**哪里**?顺便说一句,这似乎与LINQ根本没有关系...... –

+0

抱歉不清楚。在第一个列表框中点击文件类型列表项,相应的扩展名应显示在扩展列表框中。如果您使用launchy转到其目录设置。 – voldyman

回答

1

你要订阅的文件类型的ListView事件SelectedValueChanged,然后在该事件的处理程序过滤扩展收集和绑定到另一个列表框

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

由于您忘记了维度,我必须设置我必须从conf数据类型设置列表框项目 – voldyman

0

我终于找到了一个办法做到这一点。 PLZ纠正我,如果我错了......

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); 
      }     
     } 
在此之前

我在做

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

,但它显示一个错误。

相关问题