• WinForm下ComboBox设定SelectedValue总结 (SelectedValue==null解决办法)[转]


    实践发现:以SelectedIndex赋值让ComboBox自动选中时能获得SelectedValue;以SelectedText赋值让ComboBox自动选中时获得SelectedValue为空。

    this.comboBox1.SelectedIndex = this.comboBox1.FindString(room);

    这样能获得comboBox1.SelectedValue值。

    this.comboBox1.SelectedText = room;

    这样获得comboBox1.SelectedValue值为空。

    下面为转帖内容:

    最近在项目中处理一个winForm中设定ComboBox值,奇怪的是用一个对象匹配ComboBox的Datasource集合的一个对象时,设置SelectedValue时,竟然得到SelectedValue为null。

    网上搜索一下,有说是如果用DateSet绑定时,SelectedValue得到的是null或DataRowView。

    后来反复实践,发现可以用以下方法实现:

    private void SetValueByItem()
            {
                Area a = new Area();
                a.Area_ID = "8";
                a.Area_Name = "第8名";
                cbList.SelectedItem = ac.FindAll(delegate(Area ar) { return ar.Area_ID == a.Area_ID; })[0];
                lbResult.Text = cbList.SelectedItem.GetType().ToString() + ":" + cbList.SelectedValue.ToString();
            }
    其他两种设置方式:
     private void SetValueByValue()
            {
                Area a = new Area();
                a.Area_ID = "8";
                a.Area_Name = "第8名";
                cbList.SelectedValue = a.Area_ID;
                lbResult.Text = cbList.SelectedValue.GetType().ToString() + ":" + cbList.SelectedValue.ToString();
            }
     
    完整代码:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    namespace WinFormCombobox
    {
        public partial class frmMain : Form
        {
            public frmMain()
            {
                InitializeComponent();
            }
            #region Members
            AreaLists ac;
            public AreaLists GetTestArea()
            {
                AreaLists al = new AreaLists();
                for (int i = 1; i < 11; i++)
                {
                    Area a = new Area();
                    a.Area_ID = i.ToString();
                    a.Area_Name = "" + i.ToString() + "";
                    al.Add(a);
                }
                return al;
            }
            #endregion
            #region Events
            private void frmMain_Load(object sender, EventArgs e)
            {
                ac = GetTestArea();
                cbList.DataSource = ac;
                cbList.DisplayMember = "Area_Name";
                cbList.ValueMember = "Area_ID";
            }
            private void btnSetCombobox_Click(object sender, EventArgs e)
            {
                ////SetValue0();
                //SetValueByValue();
                ////SetValueByItem();
                SetValueByText();
            }
            #endregion
            #region Methods
            private void SetValue0()
            {
                Area a = new Area();
                a.Area_ID = "8";
                a.Area_Name = "第8名";
                cbList.DataSource = GetTestArea();
                cbList.DisplayMember = "Area_Name";
                cbList.ValueMember = "Area_ID";
                cbList.SelectedValue = a.Area_ID;
                lbResult.Text = cbList.SelectedValue.ToString();
            }
            private void SetValueByValue()
            {
                Area a = new Area();
                a.Area_ID = "8";
                a.Area_Name = "第8名";
                cbList.SelectedValue = a.Area_ID;
                lbResult.Text = cbList.SelectedValue.GetType().ToString() + ":" + cbList.SelectedValue.ToString();
            }
            private void SetValueByItem()
            {
                Area a = new Area();
                a.Area_ID = "8";
                a.Area_Name = "第8名";
                cbList.SelectedItem = ac.FindAll(delegate(Area ar) { return ar.Area_ID == a.Area_ID; })[0];
                lbResult.Text = cbList.SelectedItem.GetType().ToString() + ":" + cbList.SelectedValue.ToString();
            }
            private void SetValueByText()
            {
                Area a = new Area();
                a.Area_ID = "8";
                a.Area_Name = "第8名";
                cbList.SelectedIndex = cbList.FindString(a.Area_Name);
                lbResult.Text = cbList.SelectedValue.GetType().ToString() + ":" + cbList.SelectedValue.ToString();
            }
            #endregion
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace WinFormCombobox
    {
        #region Area
        public class Area
        {
            private string m_Area_ID;
            public string Area_ID
            {
                get { return m_Area_ID; }
                set { m_Area_ID = value; }
            }
            private string m_Area_Name;
            public string Area_Name
            {
                get { return m_Area_Name; }
                set { m_Area_Name = value; }
            }
            private double m_Area_Order;
            public double Area_Order
            {
                get { return m_Area_Order; }
                set { m_Area_Order = value; }
            }
        }
        #endregion
        [Serializable]
        public class AreaLists : List<Area>
        {
            private int _maxItems = 0;
            public int MaxItems { get { return this._maxItems; } set { this._maxItems = value; } }
        }
    }
     
  • 相关阅读:
    方法重载与方法重写的概念和区别(转载)
    sql exist 和not exist(转载)
    SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思 sql server 2005 2008
    sql中的isnull
    sql中unique和distinct
    SQLServer中的Merge使用
    SQL Server系统表sysobjects介绍与使用
    sql select as
    存储过程SET XACT_ABORT ON
    SQL Server之存储过程基础知识
  • 原文地址:https://www.cnblogs.com/qqflying/p/3096050.html
Copyright © 2020-2023  润新知