2011-09-13 7 views
0

linqからxmlへの解析中に私のコードがどのように読み込まれますか?linqからxmlにデータを表示し、データグリッドビューでデータを表示するとき、私のコードはディレクトリフォルダ内の1つのファイルのみを解析します

private void button1_Click(object sender, EventArgs e) 
{ 
    string[] fileEntries = Directory.GetFiles(@"", "*.cfg*"); 
    foreach (string fileName in fileEntries) 
    { 
     XDocument doc = XDocument.Load(fileName); 
     var query = from x in doc.Descendants("") 
        select new 
        { 

         MaxChild = x.Element("Max").Value, 
         MinChild = x.Element("Min").Value 
        }; 


     var query2 = from y in doc.Descendants("") 

        select new 
        { 

         MaxChild = y.Element("Max").Value, 
         MinChild = y.Element("Min").Value 

        }; 


     var query3 = from z in doc.Descendants("") 

        select new 
        { 

         MaxChild = z.Element("Max").Value, 
         MinChild = z.Element("Min").Value 
        }; 

     var bs3 = new BindingSource { DataSource = query.Union(query2.Union(query3)) }; 

     dataGridView1.AutoGenerateColumns = true; 
     dataGridView1.AutoSize = true; 

     dataGridView1.DataSource = bs3; 
     dataGridView1.Columns[0].HeaderText = "Max"; 
     dataGridView1.Columns[1].HeaderText = "Min"; 

    } 
} 

答えて

2

ディレクトリ内のファイルを繰り返し処理していますが、そのたびにデータソースを再割り当てするだけです。言い換えれば、あなたのearlier questionとまったく同じ問題ですが、それは3つのクエリではなく、各ファイルに対してそれを再割り当てすることを除いています。

var query = from file in fileEntries 
      let doc = XDocument.Load(file) 
      from x in doc.Descendants("XAxisCalib") 
         .Concat(doc.Descendants("YAxisCalib")) 
         .Concat(doc.Descendants("ZAxisCalib")) 
      select new 
      { 
       // Include this to see the file for each value 
       File = file, 
       MaxChild = x.Element("Max").Value, 
       MinChild = x.Element("Min").Value 
      }; 

var bs3 = new BindingSource { DataSource = query }; 

dataGridView1.AutoGenerateColumns = true; 
dataGridView1.AutoSize = true; 

dataGridView1.DataSource = bs3; 

EDIT:

単一のクエリを使用して、代わりにこれを試してみてくださいさて、あなたは各要素の正確に一つがあるように起こっている知っていれば、それはかなり簡単です:didnの

var query = from file in fileEntries 
      let doc = XDocument.Load(file) 
      let x = doc.Descendants("XAxisCalib").Single() 
      let y = doc.Descendants("YAxisCalib").Single() 
      let z = doc.Descendants("ZAxisCalib").Single() 
      select new 
      { 
       // Include this to see the file for each value 
       File = file, 
       MaxChildX = x.Element("Max").Value, 
       MinChildX = x.Element("Min").Value, 
       MaxChildY = y.Element("Max").Value, 
       MinChildY = y.Element("Min").Value, 
       MaxChildZ = z.Element("Max").Value, 
       MinChildZ = z.Element("Min").Value 
      }; 
+0

ありません同じdatagridviewを作成する作業はありませんが、XMLクエリにlinqを書き込む方が簡単です。これは、フォルダ内の1つのxmlファイルに対してのみ行いました。 –

+0

ファイルのそれぞれを反復し、すべての値を同じデータグリッドビューに入れる方法はありますか? –

+0

@Casey:そのクエリは本当にすべてのファイルに対して行うべきです。本当に。バインドする前に 'query.Count()'をログするとどうなりますか? 'fileEntries.Length'はどうでしょうか? –

関連する問題