2015-07-28 101 views
0

我有一個帶有幾個選項的下拉列表。當用戶更改下拉列表中的這些選項之一時,我想要創建一個筆記。問題是我想要說明發生了什麼變化。因此,例如,此代碼在貨幣dropdownlist更改時創建一個註釋。因此,如果當前值爲「歐元」,並且用戶將其更改爲「英鎊」,我希望鈔票說「貨幣從歐元更改爲英鎊」等我知道通過使用selectedItem我可以得到新的值選擇,但如何我在更改之前獲得了下拉列表中的值?如何在更改之前獲取在dropdownlist中選擇的值?

if (cust.Currency.ToString() != ddlCustomerCurrency.SelectedItem.Text) 
    { 
     Customer.Notes.InsertNote(cust.ID, Company.Current.CompanyID, DateTime.Now, "Currency changed from '" + /*Previous value */ + "' to '" + ddlCustomerCurrency.SelectedItem.Text + "'", CurrentUser.UserID, 1); 
    } 
+0

WindowsForms或WPF? –

+0

@CSharper Windows Forms – user123456789

回答

0

您可以保存當前值ddlDropDown的標籤屬性,所以你總是最後選擇的值作爲「前值」在那裏。

樣品:

void Main() 
{ 
    var currencies = new List<Currency>() { 
    new Currency { Code="EUR", Name="Euro"}, 
    new Currency { Code="USD", Name="US Dollars"}, 
    new Currency { Code="AUD", Name="Australian Dollars"}, 
    new Currency { Code="JPY", Name="Japanese Yen"}, 
    }; 

    var customer = new Customer { Id=1, Currency="", Notes=new List<string>()}; 

    Form f = new Form {Text="Sample"}; 
    ComboBox ddlCustomerCurrency = new ComboBox { Top=10, Left=10, Tag="", 
     DataSource=currencies, DisplayMember="Name"}; 
    Button b = new Button {Text = "Show Customer Notes", Top=60, Left = 10};  

    f.Controls.Add(ddlCustomerCurrency); 
    f.Controls.Add(b); 

    ddlCustomerCurrency.SelectedIndexChanged += (sender, args) => { 
    var cmb = sender as ComboBox; 
    if (cmb != null) 
    { 
     var currency = cmb.SelectedItem as Currency; 
     var oldValue= cmb.Tag; 
     if (currency != null && oldValue != currency.Name) 
     { 
     customer.Notes.Add(string.Format(
      "\nOld Currency:{0}, New Currency:{1}, Ticks:{2}", 
      oldValue, currency.Name, DateTime.Now.Ticks)); 
     cmb.Tag = currency.Name; 
     } 
    } 
    }; 

    b.Click += (sender,args) => { 
    if (customer.Notes.Any()) 
     MessageBox.Show(customer.Notes.Last()); 
    }; 

    f.Show(); 
} 

class Currency 
{ 
    public string Code { get; set; } 
    public string Name { get; set; } 
} 

class Customer 
{ 
    public int Id { get; set; } 
    public string Currency { get; set; } 
    public List<string> Notes { get; set; } 
} 
+0

你能舉一個例子說明我該怎麼做? – user123456789

+0

根據您的要求提供樣品。 –

2

你可以存儲在內存中的下拉的初始和後續值。然後,每次調用OnChange事件時,只需查看「當前」值並將其與發送給OnChange處理程序的值進行比較即可。

編輯:這樣的事情可能做的伎倆:

public class MyClass 
{ 
    private string _currentSelectedCurrency; 

    public void DdlCustomerCurrency_OnChange(object sender, EventArgs e) 
    { 
     if (cust.Currency.ToString() != ddlCustomerCurrency.SelectedItem.Text) 
     { 
      Customer.Notes.InsertNote(cust.ID, Company.Current.CompanyID, DateTime.Now, "Currency changed from '" + _currentSelectedCurrency +"' to '" + ddlCustomerCurrency.SelectedItem.Text + "'", CurrentUser.UserID, 1); 
      _currentSelectedCurrency = ((DropDownList) sender).Text 
     } 
    } 
} 
+0

你能舉一個例子說明我該怎麼做? – user123456789

+0

增加了一個示例,您可能需要修改方法簽名或類型,但應該指出正確的方向。 – kai

相關問題