代码之家  ›  专栏  ›  技术社区  ›  Scott Chamberlain

绑定复选框不更新其数据源

  •  1
  • Scott Chamberlain  · 技术社区  · 15 年前

    我有一个复选框who's checked value绑定到绑定到布尔数据表列的绑定源。当单击“保存”按钮将数据表中的更改推送到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(); 没有改变什么。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Community Mohan Dere    8 年前

    我在用达坦的建议 another one of my questions ,我试图将数据库中的文本“是/否”字段绑定到此复选框。我把它改回普通的查询并使用 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;
    }
    
    推荐文章