如何在更改之前在下拉列表中选择值
本文关键字:下拉列表 选择 | 更新日期: 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; }
}