我有一个复选框,其检查值绑定到绑定到布尔数据表列的绑定源。当我单击我的保存按钮将我的数据表中的更改推送到我的sql server时,数据表中的值永远不会更改。
设计师代码。
this.cbxKeepWebInfinityChanges = new System.Windows.Forms.CheckBox();
this.preProductionBindingSource = new System.Windows.Forms.BindingSource();
//
// cbxKeepWebInfinityChanges
//
this.cbxKeepWebInfinityChanges.AutoSize = true;
this.cbxKeepWebInfinityChanges.DataBindings.Add(new System.Windows.Forms.Binding("Checked", this.preProductionBindingSource, "WEBINFINTY_CHANGES", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.cbxKeepWebInfinityChanges.Location = new System.Drawing.Point(6, 98);
this.cbxKeepWebInfinityChanges.Name = "cbxKeepWebInfinityChanges";
this.cbxKeepWebInfinityChanges.Size = new System.Drawing.Size(152, 17);
this.cbxKeepWebInfinityChanges.TabIndex = 30;
this.cbxKeepWebInfinityChanges.Text = "Keep WebInfinity Changes";
this.cbxKeepWebInfinityChanges.UseVisualStyleBackColor = true;
this.cbxKeepWebInfinityChanges.CheckedChanged += new System.EventHandler(this.CauseApplyChangesActivation);
//
// preProductionBindingSource
//
this.preProductionBindingSource.AllowNew = false;
this.preProductionBindingSource.DataMember = "PreProduction";
this.preProductionBindingSource.DataSource = this.salesLogix;
保存代码
//the comments are the debugger values before the call in going from checked when loaded to unchecked when saved.
private void btnApplyChanges_Click(object sender, EventArgs e)
{
(...) // non related saving logic for other controls
preProductionBindingSource.EndEdit(); // checked = false, databinding = true, datatable = true
preProductionTableAdapter.Update(salesLogix.PreProduction); // checked = false, databinding = true, datatable = true
}
从未选中到检查时会发生同样的事情。我绑定到同一数据绑定源的其他项目(我有两个组合框)正在正确更新。
编辑 -
在cbxKeepWebInfinityChanges.DataBindings["Checked"].WriteValue();
之前添加preProductionBindingSource.EndEdit();
没有改变任何内容。
答案 0 :(得分:1)
我正在使用来自another one of my questions的Dathan的建议,我试图将数据库中的文本Yes / No字段绑定到此复选框。我将其更改回普通查询并使用Binding.Parse
和Binding.Format
,它解决了我的问题。
以下是一些示例代码。
Public Form1()
{
InitializeComponent();
cbxKeepWebInfinityChanges.DataBindings["Checked"].Parse += new ConvertEventHandler(cbxKeepWebInfinityChanges_Parse);
cbxKeepWebInfinityChanges.DataBindings["Checked"].Format += new ConvertEventHandler(cbxKeepWebInfinityChanges_Format);
}
void cbxKeepWebInfinityChanges_Parse(object sender, ConvertEventArgs e)
{
if ((bool)e.Value == true)
e.Value = "Yes";
else
e.Value = "No";
}
void cbxKeepWebInfinityChanges_Format(object sender, ConvertEventArgs e)
{
if ((string)e.Value == "Yes")
e.Value = true;
else
e.Value = false;
}