【发布时间】:2011-02-16 15:46:29
【问题描述】:
我对 C# 有点陌生。我有一个带有几十个不同控件(其中许多是 TextBox 控件)的 WinForm。我使用设计器将数据绑定添加到所有这些以在表单加载时获取数据。但是,数据库中的值是加密的。 (它们看起来像这样:“MasAFfa31sdf3fE23AF235==" 当它们看起来像这样时:“Suzy Doe”。)我希望能够向 Format 事件处理程序添加一个方法,以便在每个绑定的数据出现在表单中之前对其进行解密。
我的问题是:如何创建一个循环通过 this.DataBindings 并添加 Format 事件处理程序以在表单显示之前对值进行解密的方法?如何将绑定分配给控件的 DataBinding?
这就是我的想法。
首先,我会在加载方法中调用这个方法:
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;
}
}
我该怎么做?
【问题讨论】:
标签: c# winforms data-binding