2016-11-12 63 views
1

如何可以添加多个数据,而无需添加相同的数据? 我试图纠正它。如何在不添加相同数据的情况下添加多个数据?

public partial class SalaryCalculator : Form 
{ 

    public SalaryCalculator() 
    { 
     InitializeComponent(); 
    } 


    public Double basicAmount, houseRent, medicalAllowance, totalHouseRent, totalMedicalAllowance, totalSalary; 
    public int id = 0; 

    private void addButton_Click(object sender, EventArgs e) 
    { 

     ListViewItem newList = new ListViewItem((++id).ToString()); 


     string employeeName = nameTextBox.Text; 

     double basicAmount = Convert.ToDouble(basicTextBox.Text); 
     double houseRent = Convert.ToDouble(houseRentTextBox.Text); 
     double medicalAllowance = Convert.ToDouble(medicalTextBox.Text); 


     totalHouseRent = (basicAmount*houseRent)/100; 
     totalMedicalAllowance = (basicAmount*medicalAllowance)/100; 
     totalSalary = basicAmount + totalHouseRent + totalMedicalAllowance; 
     totalTextBox.Text = totalSalary.ToString(); 


     newList.SubItems.Add(employeeName); 
     newList.SubItems.Add(totalSalary.ToString()); 
     listView1.Items.Add(newList); 



     } 

    } 
} 

如何可以添加多个数据,而无需添加相同的数据?

+0

尝试使用HashSet。 http://stackoverflow.com/q/4558754/3956100 – Niklas

回答

0

您可以检查是否ListView1的包含关键要添加:

if (!listView1.Items.ContainsKey(employeeName) && !listView1.Items.ContainsKey(totalSalary.ToString())) 
{ 
    newList.SubItems.Add(employeeName); 
    newList.SubItems.Add(totalSalary.ToString()); 
    listView1.Items.Add(newList); 
} 
0

从根本上说你的做法是不正确,理想的方法是考虑正确的模型来保存数据,然后可以绑定到Ui控制。然后,您可以实现IEquatable<T>覆盖EqualsGetHashCode,这将避免数据重复,当添加到集合HashSet或者一边做手工比较。

下面将我的方法:

  • 创建数据模型如下:

// Employee型号聚集SalaryDetail,实现IEquatable<Employee>覆盖EqualsGetHashCode,创造了独特的对象,目前它上的Name基础,但可以添加从SalaryDetail多个元件

public class Employee : IEquatable<Employee> 
{ 
    public string Name { get; set;} 

    public SalaryDetail Salary { get; set;} 

    public bool Equals(Employee other) 
    { 
     return other != null && 
       Name == other.Name; 
    } 

    public override bool Equals(object other) 
    { 
     return Equals(other as Employee); 
    } 

    public override int GetHashCode() 
    { 
     return (Name.GetHashCode() * 31); 
    } 

} 

// SalaryDetail型号

public class SalaryDetail 
{ 
    public double BasicAmount { get; set;} 

    public double HouseRent { get; set;} 

    public double MedicalAllowance { get; set;} 

    public double TotalHouseRent { get; set;} 

    public double TotalMedicalAllowance { get; set;} 

    public double TotalSalary { get; set;} 
} 

//现在下当您尝试添加一个新的劳动者应当是你的代码:

Employee employee = new Employee(); 

employee.Name = // Fill Employee Name; 

employee.Salary = new SalaryDetail(); 

// Fill various Salary components like Rent, Allowances and their calculation 

现在你可以考虑增加雇员对象HashTable<Employee>类型的集合,它会自动确保只有唯一对象被添加,因为它会调用IEquatable<Employee>的覆盖Equals方法,那么你可以分配给HashtableListView UI control,因为永远不会有重复员工

另一个选择是你可以到List<Employee>,但在添加之前,你可以检查,对象是否已经存在或没有,有多种方式,一个简单的代码将是使用FindAny

List<Employee> testList = new List<Employee>(); 

//使用Find 变种existingEmployee = testList.Find(E =>即等于(NewEmployeeObject))

//如果结果(existingEmployee)为空,然后添加对象,否则员工已经存在,处理逻辑相应

或者

//使用Any(需要System.Linq

var isEmployeeExisting = testList.Any(e => e.Equals(NewEmployeeObject)) 

//如果结果(isEmployeeExisting)为真,则添加对象,否则该员工已经存在,处理逻辑相应地

相关问题