• NullableComboBox


    介绍 这是一个组合框,可以绑定到业务对象并显示空值(空)。 背景 组合框的问题在于,在将数据绑定到它之后,就不可能显示空文本属性。也不可能删除已经选择的值。这个组合框可以同时做这两件事。它被设计成可以将业务对象绑定到它,但是我认为(从未尝试过)它也应该可以与. net DataTables一起工作。 使用的代码 我把我做的这个小技巧称为“惰性绑定”。我的意思是,当你设置数据源时,我没有在第一时间绑定数据。我一直等到用户真正尝试下拉组合框。这样就可以使用户在开始时看到一个空的组合框。删除已经选中的项的工作原理与此类似。在这种情况下(如果用户按下DEL或BACK按钮),我删除了对组合框的数据绑定(但仍然记得数据源)。代码本身非常简单: 惟一有趣的方法是执行数据绑定的方法:Hide。收缩,复制Code

    public void SetDataBinding(IList dataSource, object objectToModify, 
                                          string propertyName, string displayMember)
    {
        // init combo box and delete all databinding stuff
        this.DisplayMember = String.Empty;
        this.Items.Clear();
        this.ValueMember = String.Empty;
        this.Text = String.Empty;
    
        // init private fields
        this.mDataSource = dataSource;
        this.mObjectToModify = objectToModify;
        this.mPropertyName = propertyName;
        this.mProperty = 
          this.mObjectToModify.GetType().GetProperty(this.mPropertyName);
        this.mDisplayMember = displayMember;
        this.mNullableMode = true;
        
        // get selected item
        object selectedItem = 
          this.mProperty.GetValue(this.mObjectToModify, null);
    
        // if not null, bind to it
        if (selectedItem != null)
        {
            this.DataSource = this.mDataSource;
            this.SelectedItem = selectedItem;
        }
        // do nothing and set datasource to null
        else
            this.DataSource = null;
    }

    下拉事件:Hide复制Code

    protected override void OnDropDown(EventArgs e)
    {
        // if no datasource is set, set it
        if (this.mNullableMode && this.mDataSource 
               != null && this.DataSource == null)
            this.DataSource = this.mDataSource;
    
        base.OnDropDown(e);
    }

    还有按键关闭事件:隐藏复制Code

    protected override void OnKeyDown(KeyEventArgs e)
    {
        // if DEL or BACK is pressed set property to null and data source to null
        if (this.mNullableMode && (e.KeyCode == 
                 Keys.Delete || e.KeyCode == Keys.Back))
        {
            // next line is very important:
            // without you may get an OutOfRangeException
            this.DroppedDown = false;
            this.DataSource = null;
        }
    
        base.OnKeyDown(e);
    }

    本文转载于:http://www.diyabc.com/frontweb/news247.html

  • 相关阅读:
    二维空间轨迹聚类
    Java 格式化输出
    Linux 小笔记
    Nginx ServerName 配置说明(转)
    LVS
    Nginx + tomcat 实现简单集群(基于反向代理方式)
    mysql 外键
    tomcat 日志输出
    tomcat https
    SpringMVC表单标签简介
  • 原文地址:https://www.cnblogs.com/Dincat/p/13431615.html
Copyright © 2020-2023  润新知