Я немного новичок в C #.У меня есть WinForm с несколькими десятками различных элементов управления (многие из них элементы управления TextBox).Я использовал конструктор, чтобы добавить привязку данных ко всем из них, чтобы получить данные при загрузке формы.Однако значения в базе данных зашифрованы.(Они выглядят так: «MasAFfa31sdf3fE23AF235 ==», когда они должны выглядеть следующим образом: «Сьюзи-Доу».) Я хотел иметь возможность добавить метод в обработчик событий Format для расшифровки данных каждой привязки до ее появления в форме.
Мои вопросы: Как я могу создать метод, который циклически перебирает this.DataBindings и добавляет обработчик события Format для расшифровки значения перед отображением формы?Как назначить привязку к привязкам данных для элемента управления?
Вот то, о чем я думал.
Сначала я бы вызвал этот метод в методе загрузки:
private void PatientForm_Load(object sender, EventArgs e)
{
this.tableAdapter.Fill(this.DBDataSet.People);
UpdateBindings(this);
}
Затем я перебрал бы элементы управления this, чтобы зарегистрировать EventHandler для каждого элемента управления TextBox:
private void UpdateBindings(Control controlGroup)
{
object controlItem;
foreach (object controlItemLoop in controlGroup.Controls)
{
// Recurse through this control's items and get their bindings...
controlItem = (Control)controlItemLoop;
UpdateBindings((Control)controlItem);
// Update Controls for Data Formatting
TextBox controlItemTextBox = default(TextBox);
if (controlItem is TextBox)
{
controlItemTextBox = (TextBox)controlItem;
int i = 0;
foreach (Binding binding in controlItemTextBox.DataBindings)
{
Binding b = new System.Windows.Forms.Binding(controlItemTextBox.DataBindings[i].PropertyName, controlItemTextBox.DataBindings[i].DataSource, controlItemTextBox.DataBindings[i].BindingMemberInfo.BindingMember, true);
// Here, how do I assign a control's Control.DataBindings?
// Like this? controlItemTextBox.DataBindings[i] = b;
b.Parse += new ConvertEventHandler(BindingParse_TextBox);
b.Format += new ConvertEventHandler(BindingFormat_TextBox);
i++;
}
}
}
this.patientsBindingSource.ResetCurrentItem();
}
Затем, конечно:
private void BindingFormat_TextBox(object sender, ConvertEventArgs e)
{
// Decrypt
if (e.DesiredType != typeof(string))
return;
if (e.Value.GetType() != typeof(string))
return;
string value =
try
{
e.Value = Decrypt((string)e.Value);
}
catch(Exception error)
{
MessageBox.Show("A formatting error occurred. Please attempt the operation again.\n\n" + error.Message, "Data Formatting Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
Как я могусделать это?