我写桌面应用程序在Visual Studio2008/C#

我完成了(主要)编写一个引擎,它生成了一个工作计划,每周为一个小型的公司;一种形式的课程安排问题

现在我设计的一种形式,其中可以确定用户的最初参数或准则,对发动机坚持(作为一些设置可选)

我有一类叫EngineParameters,它拥有所有的那些设置。

用于该目的的数据绑定,我创建了一个 bndEngineParameters 级,这封装所有相关领域吸气,并制定者

public class bndEngineParameters
    {
        private engineParameters _parameters;

        public bndEngineParameters(engineParameters ep)
        {
            this._parameters = ep;                
        }

        public bool avoidGrouping
        {
            get { return _parameters.avoidGrouping; }
            set { _parameters.avoidGrouping = value; }
        }

        public bool avoidWeekends
        {
            get { return _parameters.avoidWeekends; }
            set { _parameters.avoidWeekends = value; }

        }

        public bool keyFlow
        {
            get { return _parameters.keyFlow; }
            set { _parameters.keyFlow = value; }
        }

        public bool keyFlowAssistants
        {
            get { return _parameters.keyFlowAssistants; }
            set { _parameters.keyFlowAssistants = value; }
        }        
    }

它是不完整的-将有int值(最多一个小时可以工作等);我想那些bool值受到的选择框在我的形式

它是在这一简单的任务我在那里令人惊讶的是遇到了问题

使用"添加新的数据源"向导,我创建了一个结合源

private System.Windows.Forms.BindingSource bndEngineParametersBindingSource;

然后我开的 检查 酒店我框到各自的财产我的结合的资料来源:

alt text

我实现了一个地方变量 boundParameters 因此,我获得的参数设置的用户

  public partial class formGenerateRota : Form
    {

        public bndEngineParameters boundParameters;

        // (...)

        public formGenerateRota()
        {
            InitializeComponent();
        }        

        private void formGenerateRota_Load(object sender, EventArgs e)
        {
            boundParameters = new bndEngineParameters(new engineParameters());
            bndEngineParametersBindingSource.Add(boundParameters);            
        }

        // (...)
}

和什么?什么也不会发生。有一个bndEngineParameters目下 bndEngineParametersBindingSource.电流 (在运行时的课程),但是 avoidWeekends 值永远不会改变(当我检查的框和关闭), bndEngineParametersBindingSource_currentitemchanged 事件是从来没有发射

怎么了?


对不起!它不会改变,但只有在框失去焦点(后验证)。

我愚蠢的时候

如果我做错了什么无论如何(我不是任何好的数据结合),我非常感谢如果你指出来,当然!

有帮助吗?

解决方案

两个共同的问题:

  • 设置 DataSourceUpdateModeOnPropertyChanged
  • (可选)收到的变化 的对象,实施 {name}Changed 事件的图案或 INotifyPropertyChanged

说实话不过,我敢肯定,大多数的不必要的;你应该只能够说:

myCheckbox.Bindings.Add("Checked", myEngineParameters, "avoidWeekends",
    false, DataSourceUpdateMode.OnPropertyChanged);

充满例子:

using System;
using System.Diagnostics;
using System.Windows.Forms;

class EngineParameters {
    private bool avoidWeekends;
    public bool AvoidWeekends {
        get { return avoidWeekends; }
        set {
            avoidWeekends = value;
            Debug.WriteLine("AvoidWeekends => " + value);
        }
    }
}
static class Program {
    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();            
        using(Form form = new Form())
        using (CheckBox myCheckbox = new CheckBox()) {
            EngineParameters myEngineParameters = new EngineParameters();
            myEngineParameters.AvoidWeekends = true;    
            form.Controls.Add(myCheckbox);
            myCheckbox.DataBindings.Add("Checked", myEngineParameters, "AvoidWeekends",
                false, DataSourceUpdateMode.OnPropertyChanged);
            Application.Run(form);
        }
    }
}

其他提示

而不是:

bndEngineParametersBindingSource.Add(boundParameters); 

这样做:

bndEngineParametersBindingSource.DataSource = boundParameters; 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top