如何在更改之前在下拉列表中选择值

本文关键字:下拉列表 选择 | 更新日期: 2023-09-27 18:05:10

我有一个下拉列表与几个选项。当用户在下拉列表中更改其中一个选项时,我想创建一个注释。问题是我想让纸条上写明我做了什么改变。例如,这段代码在货币下拉列表更改时创建了一个注释。因此,如果当前值是"欧元",而用户将其更改为"英镑",我希望笔记上写着"货币从欧元更改为英镑"等。我知道通过使用selectedItem,我可以获得选中的新值,但是我如何获得在下拉列表中进行更改之前的值?

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);
   }

如何在更改之前在下拉列表中选择值

您可以将下拉列表的初始值和后续值存储在内存中。然后,每次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
        }
    }
}

您可以将当前值保存到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; }
}