2016-11-12 59 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)爲真,則添加對象,否則該員工已經存在,處理邏輯相應地

相關問題