2015-07-28 93 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

相关问题