【问题标题】:Showing an updated list in a form在表单中显示更新的列表
【发布时间】:2014-03-03 06:05:23
【问题描述】:

我正在设计一个数据库来保存从文本文件中读取的员工列表。 我有两种形式,第一种形式(frmManager)充当浏览列表的视图,我有下一个和上一个按钮,我可以滚动列表中的员工。另一种形式(frmAdd),可以将新员工添加到列表中。我的问题是,当我更新 List 时,如何在 frmManager 中更新它?当我添加一个新员工时,他们的属性被写入文本文件,但我必须重建项目以显示更新的列表。 添加员工的文件:

public class EmployeeDB
{
    public List<Employee> employees;

    public static EmployeeDB instance;

    public static EmployeeDB Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new EmployeeDB();
                instance.populate();
            }
            return instance;
        }
    }

    public EmployeeDB()
    {
        employees = new List<Employee>();
    }

    public void populate()
    {
        string[] parts;
        foreach (string line in File.ReadAllLines("StaffList.txt"))
        {
            parts = line.Split(',');
            employees.Add(new Employee(parts[0], parts[1], parts[2], parts[3], int.Parse(parts[4]), int.Parse(parts[5])));

        }
    }
}

员工类只包含一个构造函数来添加他们的详细信息。 添加新员工的表单

public partial class frmAdd : Form
{

    EmployeeDB employee;
    int grade;

    public frmAddEmployee()
    {
        employee = EmployeeDB.Instance;
        InitializeComponent();
    }

    private void btnCreate_Click(object sender, EventArgs e)
    {
        System.IO.StreamWriter file = new System.IO.StreamWriter("StaffList.txt", true);

        foreach (Employee em in employee.employees) //To avoid username clashes
        {
            if (em.username == txtUsername.Text)
            {
                file.WriteLine(txtFName.Text + "," + txtLName.Text + "," + txtUsername.Text + employee.employees.Count()
                               + "," + txtPassword.Text + "," + checkedButton().ToString() + ","
                              + 0.ToString(), Environment.NewLine);
            }
            else
            {
                file.WriteLine(txtFName.Text + "," + txtLName.Text + "," + txtUsername.Text
                                        + "," + txtPassword.Text + "," + checkedButton().ToString() + ","
                                       + 0.ToString(), Environment.NewLine);
            }

            file.Close();
            MessageBox.Show("Employee successfully added");
            return;
        }

我曾尝试调用 EmployeeDB 文件,希望它会重新填充但无济于事。任何帮助将不胜感激。

【问题讨论】:

  • 为什么不使用实际的数据库?
  • 我最初尝试了一个数据库,但我在大学网络上工作,它似乎不喜欢与数据库链接,即使它们是本地的

标签: c# winforms list streamwriter


【解决方案1】:

您不会在任何地方将新员工添加到列表中。从您包含的代码中,您仅通过 populate() 填充列表。

我会在按钮单击时将新员工添加到 EmployeeDB。这将导致列表是最新的。然后我会在你的 EmployeeDB 类中添加一个方法来写入文件。

private void btnCreate_Click(object sender, EventArgs e)
{
    string username = txtUsername.Text;
    int i = employee.employees.Count();
    while (employee.AsEnumerable().Select(r => r.username == username).Count() > 0)
    {
        username = txtUserName.Text + i++;  //Makes sure you have no common usernames
    }
    employee.employees.Add(new Employee(){...});
    employee.SaveFile(); //New method  
}

我假设您在 Employee 类中有一个名为 username 的字符串,因此上面的 r => r.username

【讨论】:

  • 感谢 Garrick,我从头开始重新启动项目以帮助清理它,因为我把它弄得一团糟。这一次我会采纳你的建议。
猜你喜欢
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
相关资源
最近更新 更多