2009-11-14 4 views
0

Il y a un fichier avec une telle structure:peuplant listbox

companyname1; shortname1; identification1, 01.01.1980 companyname2, shortname2, identification2, 01.01.1987 companyname3, shortname3, identification3, 01.01.1990 companyname4; shortname4, identification4, 23.01.1995

Je veux mettre tous « companynameX » dans listbox1 et lorsque chaque élément est cliqué alors lié « identificationX » sera affiché dans zone de texte. Je suis très stupide et pour cette tâche simple, j'ai utilisé DataTable. Cela ne fonctionne pas, la liste est remplie avec un élément, la zone de texte est remplie avec ce "System.Data.DataRowView". Pourquoi ça ne marche pas et comment faire ma tâche de façon plus élégante?

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; 
} 

Répondre

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";