1.  DataTable

用DataTable直接绑定,只需要设置DataSource、DisplayMember、ValueMember三个属性即可。

Code
this.cmbConsumeSuperMarket.DataSource = dtSuperMarket;
this.cmbConsumeSuperMarket.DisplayMember = "Name"; this.cmbConsumeSuperMarket.ValueMember = "ID"; this.cmbConsumeSuperMarket.SelectedIndex = 0;

在使用时使用如下方式,即可取得相应的ID和Name,这样就可以基本满足业务要求了。

StringTools.ObjectToInt(this.cmbConsumeSuperMarket.SelectedValue);
StringTools.ObjectToStr(this.cmbConsumeSuperMarket.SelectedText);

但如上的问题是,因为ComboBox绑定后默认显示第一项,但需要一项提示性选项,我没有找到什么好方法实现了。

上网看一些人用ComboBox.SelectedIndex = -1或设置ComboBox.Text或初始化设置ComboBox.Items一个项为初始项或设置ComboBox.DropDownStyle,但我这里都没达到效果。

本应实现效果A,但以上只能实现B效果,所以以上不符合要求。

效果A     效果B

2.  ComboBox.Items.Add

一开始使用时,以为像Asp.net那样有ListItem属性可以使用,但Items只有几个特别简单的属性,还好Add(object item),所以就只能在object这里作文章了。

所以就把要绑定的item新new 了一个对象,再重写ToString(),如是乎就可以了。

因为在整个页面中,有很多类似的ComboBox控件,所以就小小的抽象了一下,然后就可以便捷的实现效果B了。具体实现方式如下:

Code
using System.Data;
using System.Windows.Forms;

namespace BlackCore.App.Method
{
    //抽象类 DataBindControls 引入抽象方法 dataBindComboBox(……)
    public abstract class DataBindControls
    {
        /// <summary>
        /// 绑定ComboBox
        /// </summary>
        /// <param name="cmb">ComboBox Control</param>
        /// <param name="isInsertDefaultItem">是否为此控件插入一个默认选项且默认选中</param>
        /// <param name="dt">需要绑定的DataTable</param>
        /// <param name="selectedText">显示文字(DisplayMember)</param>
        /// <param name="selectedValue">ValueMember</param>
        public abstract void dataBindComboBox(ComboBox cmb, bool isInsertDefaultItem, DataTable dt, string selectedText, string selectedValue);
    }
}

实现抽象即可

Code
using System.Data;
using System.Windows.Forms;
using BlackCore.FinancialLibrary;

namespace BlackCore.App.Method
{
    //实现抽象
    //类 DataBindControlsImplement 重写 dataBindComboBox,并提供一个具体实现。
    //由于 DataBindControlsImplement 中没有了抽象成员,因此可以(但并非必须)将 DataBindControlsImplement 声明为非抽象类。
    public class DataBindControlsImplement : DataBindControls
    {        
        public override void dataBindComboBox(ComboBox comboBox, bool isInsertDefaultItem, DataTable dataTable, string selectedText, string selectedValue)
        {
            if (dataTable != null && dataTable.Rows != null && dataTable.Rows.Count > 0)
            {
                if (comboBox.Items.Count > 0)
                {
                    comboBox.Items.Clear();
                }
                int i = 1;
                foreach (DataRow dataRow in dataTable.Rows)
                {
                    //comboBox.SelectedText = StringTools.ObjectToStr(dataRow[selectedText]).Trim ();
                    //comboBox.SelectedValue = StringTools.ObjectToInt(dataRow[selectedValue]).ToString ();

//BlackCore.BLL.FinancialManage.FMProject bllProject = new BlackCore.BLL.FinancialManage.FMProject();
                    //BlackCore.Model.FinancialManage.FMProject modelProject = new BlackCore.Model.FinancialManage.FMProject();
                    //modelProject = bllProject.GetModel(StringTools.ObjectToInt(dataRow["ID"]));

//用如下这种方式就只有selectedText,而没有selectedValue
                    //comboBox.Items.Add(StringTools.ObjectToStr(dataRow[selectedText]).Trim());

//可以存储在ComboBox中的任何种类的对象,而不是字符串。重写toString()方法生成的文本框将显示。
                    //这样就可以实现selectedText,selectedValue或更多需要的属性
                    comboBox.Items.Add(new ComboBoxItemTextValue(StringTools.ObjectToInt(dataRow[selectedValue]).ToString(), StringTools.ObjectToStr(dataRow[selectedText])));
                }
                if (isInsertDefaultItem)
                {
                    comboBox.Items.Insert(0, "请选择");
                }
                comboBox.SelectedIndex = 0;
            }            
        }

public class ComboBoxItemTextValue
        {
            public string selectText;
            public string selectValue;

public ComboBoxItemTextValue(string _selectValue, string _selectText)
            {
                selectValue = _selectValue;
                selectText = _selectText;
            }
            public override string ToString()
            {
                return selectText;
            }
        }

}
}

ComboBox的绑定

Code
DataBindControlsImplement implement = new BlackCore.App.Method.DataBindControlsImplement();

implement.dataBindComboBox(this.searchCmbConsumeMarket, true, bllMarket.GetList("").Tables[0], "Name", "ID");

ComboBox的获取

Code
if (StringTools.ObjectToInt(searchCmbConsumeMarket.SelectedIndex) != 0)
{
    DataBindControlsImplement.ComboBoxItemTextValue comboItem = 
        (DataBindControlsImplement.ComboBoxItemTextValue)this.searchCmbConsumeProject.SelectedItem;
        string selectedText = comboItem.selectText;
        int selectedValue = comboItem.selectValue;
}

本人初学WinForm开发,以上内容是个人整理以便有需而用,其若有误,烦请帮忙指点更正,衷心感谢!BlackCore敬上!

转载于:https://www.cnblogs.com/blackcore/archive/2009/11/20/1606896.html

WinForm 中ComboBox 绑定总结相关推荐

  1. WinForm中ComBoBox绑定显示值和实际值

    在ASP.NET中ComBoBox可以绑定显示值和实际值,但是在Winform中却是没有的(通过DataSource绑定数据源的时候是可以的,但是有null值和空值的限制) (所有代码均从实际项目中截 ...

  2. WinForm中Combobox绑定值问题

    好久没写过WinForm程序了,昨天闲来无事就试着写个玩玩.界面中有两个combobox控件,第二个combobox控件中绑定值是根据第一个combobox值而定的.当时自己写的代码是: 1 priv ...

  3. WinForm中ComboBox绑定数据的用法

    DataTable table= BLLPackageCategory.SelectType();            comboBox1.ValueMember = "Id"; ...

  4. c#(winform)中ComboBox和ListBox添加项完全解决

    c#(winform)中ComboBox和ListBox添加项完全解决 c#(winform)中ComboBox和ListBox添加项完全解决 刚开始用.net 的winform开发,发现好些控件都很 ...

  5. WinForm 中 comboBox控件之数据绑定

    http://www.cnblogs.com/peterzb/archive/2009/05/30/1491923.html 下面介绍三种对comboBox绑定的方式,分别是泛型中IList和Dict ...

  6. Winform中DataGridView绑定IList数据源后的排序

    首先,实现ICompare接口 public class ObjectPropertyCompare<T> : IComparer<T> { private PropertyD ...

  7. WinForm下ComboBox获取绑定对象集的SelectedValue补充

    在上文<WinForm下ComboBox设定SelectedValue总结>中,我列举了出现不能正常获取SlectedValue的一些方法.原文写得比较乱,引起读者的理解分歧,在此表示歉意 ...

  8. Ext.net中ComboBox如何绑定数据库中的值

    今天在项目中再次碰到了问题,就是Combobox中的值如果是直接绑定很简单.简单添加项就行了.代码如下: <ext:ComboBox ID="ComBox_SecretsLevel&q ...

  9. 在winform中,禁止combobox随着鼠标一起滑动!

    在winform中,如果form上或者是控件上有一个combobox控件,当你选择这个控件,当你鼠标移动其他地方,滑动鼠标时,这时combobox的选择值就会随之鼠标一起变化,如果你不想让comboB ...

最新文章

  1. 1.8-zabbix服务端安装
  2. 查看linux服务器信息
  3. 关于python中self
  4. linux无法启动hbase密码,linux – 无法在请求的2181端口启动ZK,而导出HBASE_MANAGES_ZK = false...
  5. 立创EDA元件封装导入AD软件教程
  6. java计算器代码_java计算器源代码(新手入门级)
  7. php7.4 ffi,PHP7.4中FFI的介绍(代码示例)
  8. 日记app制作(OC)
  9. A Game of Thrones(97)
  10. 在线文档查看器:Gleamtech Document Viewer 6.6.1
  11. 微信输入法语音转文字的设计点
  12. 招商银行信用卡中心笔测
  13. python实现抽签功能(不放回抽样)
  14. qt实现简易图片转换功能
  15. 机房远程集中监控系统
  16. python中row什么意思_如何在Spark(Python)中订购我的Row对象的字段
  17. 【多元统计分析】聚类分析【期末复习】
  18. hypermesh 连接单元_Hypermesh三维网格划分技能,以汽车发动机连杆结构为例
  19. 局域网计算机如何传输文件,同一个局域网内如何传输文件
  20. 【软考中级】多媒体应用设计师复习笔记第九章

热门文章

  1. event.keycode值大全
  2. 孤陋寡闻了吧?Python 居然可以做这30件神奇好玩的事情(附教程)
  3. c语言和java和汇编语言_C语言和汇编语言的区别是什么?
  4. groovy附件存mysql_Groovy 操作mysql数据库
  5. java能够运行的原理_JAVA程序运行原理分析(一)
  6. Nginx负载均衡策略之ip_hash
  7. SpringMVC的请求-获得请求参数-Restful风格的参数的获取
  8. 文件上传之Springmvc方式上传原理分析
  9. if嵌套-火车站安检-检查刀的长度
  10. MySQL服务器参数介绍