2017-05-28 11 views
-1

私はWindowsフォームアプリケーションのリストボックスにデータをロードしようとしています。私はここで働いloadメソッドを取得しようとしていたクラスと呼ばれる従業員を持つコードIで以下のようにリストボックスにデータを置く私のメインフォームからコード...これからテキストファイルをリストボックスにロードする

namespace HRApplication 
{ 
public partial class MainForm : Form 
{ 
    // The file used to store employee details 
    string employeesFile = "employees.txt"; 

    // The collection used to hold the employee data 
    Employees employees; 

    public MainForm() 
    { 
     InitializeComponent(); 
    } 

    private void MainForm_Load(object sender, EventArgs e) 
    { 
     employees = new Employees(); 
     if (!employees.Load(employeesFile)) 
     { 
      MessageBox.Show("Unable to load employees file"); 
     } 
     else 
     { 
      PopulateListBox(); 
     } 
    } 

    private void PopulateListBox() 
    { 
     listBoxEmployees.Items.Clear(); 

     foreach (Employee employee in employees) 
     { 
      listBoxEmployees.Items.Add(employee.lastName + ", " + 
     employee.firstName); 
     } 
     //listBoxEmployees.SelectedIndex = 0; 
    } 

を持っていますどんな助けも非常に役に立つでしょう。

namespace HRApplication 
{ 
public class Employees : List<Employee> 
{ 

    public Employees() 
    { } 


    public bool Load(string employeesFile) 
    { 
     List<string> lines = new List<string>(); 

     using (StreamReader reader = new StreamReader("employees.txt")) 
     { 
      string line; 
      while ((line = reader.ReadLine()) != null) 
      { 
       lines.Add(line); 
      } 
      return true; 
      } 
     } 
    } 
} 
+0

質問をするのを忘れましたか?あなたのコードで何が間違っていますか? – Steve

+0

申し訳ありませんが、それがリストボックスに表示されず、なぜか不思議でしたか? –

+0

List of Employeesをループしますが、行を文字列のリストに追加するためです。従業員クラスの必須コードを追加してください – Steve

答えて

0

簡潔にするために、Employeeクラスがこのようなものであるとします。

public class Employee 
{ 
    public string lastName {get;set;} 
    public string firstName {get;set;} 
    public override string ToString() 
    { 
     return lastName + ", " + firstName; 
    } 
} 

ファイルからテキストの行をロードするときに、従業員データを表す部分に分割する必要があります。 (私は(ToStringメソッドを使用)、従業員クラスのインスタンスを作成し、従業員の基本クラスにインスタンスを追加するためのデータ(List<Employee>

public bool Load(string employeesFile) 
{ 
    using (StreamReader reader = new StreamReader("employees.txt")) 
    { 
     string line; 
     while ((line = reader.ReadLine()) != null) 
     { 
      // Suppose that your line is splittable using a comma... 
      string[] temp = line.Split(','); 

      // This is really simplicistic. In a real world scenario 
      // you should check if the line contains correctly all the 
      // fields required to populate an Employee... 
      Employee emp = new Employee() 
      { 
       firstName = temp[0], 
       lastName=temp[1] 
      }; 

      // This class is derived from List<T> 
      // so you can use the Add method 
      // to add the employee to itself... 
      Add(emp); 
     } 
     return true; 
     } 
    } 
} 

は、この時点で、リストボックスを移入するためにあなたのループが動作する必要があることを使用しますリストボックスのテキストの建物を隠すためにオーバーロード)

private void PopulateListBox() 
{ 
    listBoxEmployees.Items.Clear(); 
    foreach (Employee employee in employees) 
    { 
     listBoxEmployees.Items.Add(employee); 
    } 
    //listBoxEmployees.SelectedIndex = 0; 
} 
+0

内の従業員コレクションを反復するIteratorが定義されている場所がわかりません。私はコンマを|私のデータがどのように分割されているかのように、今は正しく動作しています。どうもありがとうございました!! –

関連する問題