2009-11-14 261 views
0

有這樣的結構的文件是:填充列表框

companyname1; shortname1; identification1; 01.01.1980 companyname2; shortname2; identification2; 1987年1月1日 companyname3; shortname3; identification3; 1990年1月1日 companyname4; shortname4; identification4; 23.01.1995

我想把所有的「companynameX」放到listbox1中,當每個項目被點擊時,相關的「identificationX」將顯示在文本框中。 我很愚蠢,爲了這個簡單的任務,我使用了DataTable。它不起作用,列表框填充了一個項目,文本框填充了這個「System.Data.DataRowView」。爲什麼它不工作,以及如何以更優雅的方式完成我的任務?

foreach (string line in File.ReadAllLines(@"D:\file.txt")) 
{ 
    string[] parts = line.Split(';'); 

    DataSet ds = new DataSet(); 
    DataTable dt = new DataTable("dt"); 
    DataColumn dc; 
    DataRow dr; 
    dc = new DataColumn(); 
    dc.DataType = System.Type.GetType("System.String"); 
    dc.ColumnName = "First"; 
    dt.Columns.Add(dc); 

    dc = new DataColumn(); 
    dc.DataType = System.Type.GetType("System.String"); 
    dc.ColumnName = "Second"; 
    dt.Columns.Add(dc); 

    ds.Tables.Add(dt); 
    for (int j = 2; j < parts.Length; j += 4) 
    { 
     for (int k = 0; k < parts.Length; k += 4) 
     { 
       dr = dt.NewRow(); 
       dr["First"] = parts[j]; 
       dt.Rows.Add(dr); 

       dr = dt.NewRow(); 
       dr["Second"] = parts[k]; 
       dt.Rows.Add(dr); 
      } 
    } 

    listBox1.DataSource = dt; 
    listBox1.DisplayMember = "First"; 
    listBox1.ValueMember = "Second"; 
} 

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
      string value = listBox1.SelectedItem.ToString(); 
      textBox1.Text = value; 
} 

回答

2
var records = from line in File.ReadAllLines(@"D:\file.txt") 
       let parts = line.Split(';') 
       select new 
       { 
        Company = parts[0], 
        Identification = parts[2] 
       }; 
listBox1.DataSource = records; 
listBox1.DisplayMember = "Company"; 
listBox1.ValueMember = "Identification";