【发布时间】:2011-05-31 18:37:23
【问题描述】:
我在 Windows 窗体上的选项卡控件中有一堆控件。一些控件是数据绑定的。我正在尝试访问控件的值,但某些控件似乎没有值,直到我实际导航到具有控件的表单。控件数据何时绑定?在实际设置值之前必须先显示它们吗?
【问题讨论】:
标签: c# winforms visual-studio-2008 data-binding
我在 Windows 窗体上的选项卡控件中有一堆控件。一些控件是数据绑定的。我正在尝试访问控件的值,但某些控件似乎没有值,直到我实际导航到具有控件的表单。控件数据何时绑定?在实际设置值之前必须先显示它们吗?
【问题讨论】:
标签: c# winforms visual-studio-2008 data-binding
我遇到了同样的问题,每当我想从未导航的标签页中读取组合框默认值时返回 null,并且我发现在控制显示之后发生数据带, 而我所做的,就是写这个函数
protected virtual void SetComboData(System.Windows.Forms.Control parentCtrl, DataRow r)
{
foreach (System.Windows.Forms.Control ctrl in parentCtrl.Controls)
{
if (ctrl is ComboBox)
if ((ctrl as ComboBox).DataBindings.Count != 0)
(ctrl as ComboBox).SelectedValue = r[(ctrl as ComboBox).DataBindings[0].BindingMemberInfo.BindingMember];
if (ctrl is TextBox)
if ((ctrl as TextBox).DataBindings.Count != 0)
(ctrl as TextBox).Text = r[(ctrl as TextBox).DataBindings[0].BindingMemberInfo.BindingMember].ToString();
SetLecData(ctrl, r);
}
}
我在保存数据集之前调用了该函数
SetComboData(tabControl1, MyDataSet.Table["MyTable"]);//for tabcontrol
【讨论】:
这是因为选项卡控件在被选中之前不会“初始化”。解决方法是对 tabcontrol 进行子类化,并在添加标签页时“初始化”标签页。详情请见Does data binding work on invisible control?。
【讨论】: