2016-04-13 7 views
1

私はコンボボックスにリストを挿入する必要があり、リストはemployee.datファイルからデータを取り込む必要がある作業をしています。私は正常にコンボを投入していますが、ソート中は問題に直面しています。私が並べ替えようとしている値は文字列番号です。 0〜9の値を表示しますが、9を超えた場合はコンボがうまく見えます。ここでコンボボックスを並べ替える際の問題

は私が行うために必要なものスクリーンショット

enter image description here

ソートこれらの値であり、10はここで9

でリードされなければならないことは、私はまだ試してみましたコードスニペットであることを意味します。

  private void FormDelete_Load(object sender, EventArgs e) 
    { 
     //LOAD EVENT for FORM 

     //Clear all form controls 
     Reset(); 

     //Fill the ID Combo box using data in List<T> 
     comboBoxID.Items.Clear(); 
     foreach (MyClass.Employee obj in MyClass.listEmployees) 
     { 
      comboBoxID.Items.Add(obj.ID); 
     } 

     //Sort the combo box ibn ascending order 
     comboBoxID.Sorted = true; 

    } 

Employee.cs

public class Employee 
    { 
     public int ID; 
     public string fName; 
     public string lName; 
     public string gender; 
     public int age; 
     public double hourWage; 

    } 
    public static List<Employee> listEmployees = new List<Employee>(); 

Empolyee.dat

1, Ann, Crowe, F, 34, 12.95 
2, Bob, Costas Jr., M, 27, 8.75 
3, Sue, Soppala, F, 22, 7.95 
4, Bill, Barton, M, 45, 15.25 
5, Jill, Jordan, F, 33, 14.75 
6, Art, Ayers, M, 33, 14.75 
7, Larry, Stooge, M, 55, 21.05 
8, Art, Ayers, M, 33, 14.75 
9, Larry, Stooge, M, 55, 21.05 
10, Art, Ayers, M, 33, 14.75 
11, Larry, Stooge, M, 55, 21.05 

リスト移入コード

if (File.Exists("employee.data")) 
     { 
      try 
      { 
      streamEmployee = new StreamReader("employee.data"); 
      string line; //to read a line from the text file 
      string[] arrFields = new string[5]; 
      while (streamEmployee.Peek() > -1) 
      { 
       line = streamEmployee.ReadLine(); //read a line of records  from file 
       arrFields = line.Split(','); //split the line at comma junction, and save split       //fields in array 

       MyClass.Employee objEmp = new MyClass.Employee(); //create a "specific" employee          //object instance 

       //Assign each field from line as generic object's properties to make it "specific 
       objEmp.ID = Convert.ToInt32(arrFields[0].Trim()); //ID is integer 
       objEmp.fName = arrFields[1].Trim(); 
       objEmp.lName = arrFields[2].Trim(); 
       objEmp.gender = arrFields[3].Trim(); 
       objEmp.age = Convert.ToInt32(arrFields[4].Trim()); //age is integer 
       objEmp.hourWage = Convert.ToDouble(arrFields[5].Trim()); //hourly wage is double 

       //Add this specific employee object to the List 
       MyClass.listEmployees.Add(objEmp); 

      } //while 


     } //try 

     catch (IOException err) 
     { 
      MessageBox.Show(err.Message); 
      error = true; 

     } //catch 

     finally 
     { 
      if (streamEmployee != null) //it is indeed representing a file and may not be closed 
       streamEmployee.Close(); 


     } //finally 

    } //if 
+1

ファイルがすでにソートされています。Sorted = True行を削除すると、正しい順序でアイテムが既にあります。 – Steve

+1

@スティーブこれを試してみてください。しかし、入力ソースファイルから注文を変更するとどうなりますか?ソートされた行をコメントアウトすることは解決策ではありません。 –

+0

この場合に特別に答えを追加しました – Steve

答えて

3

ファイルは既にソートされているため、Sorted = trueを呼び出す必要はありません。あなたはどのような順序が入力ファイルに存在している、ことを確認したい場合は
とにかく、あなたのコードは、IDの順序を以下の従業員を追加し、その後は再び

foreach (MyClass.Employee obj in MyClass.listEmployees.OrderBy(x => x.ID)) 
{ 
    comboBoxID.Items.Add(obj.ID); 
} 

設定する必要はありませんし、あなたのループを変更することができますSortedプロパティをtrueに設定すると....

+0

ベストプラクティスは入力ファイルの並べ替え順序に依存しないためです。理由は、入力ファイルのソート順が変更された場合、コンボボックスの動作が変わるということです。あなたがコードでそれを処理することを確認してください。 –

関連する問題