zoukankan      html  css  js  c++  java
  • WinForm下ComboBox设定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();
    }
    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();
    }

    完整代码:

    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; } }
    }
    }


  • 相关阅读:
    jquery 代码搜集
    Windows Server 2008中安装IIS7.0
    javascript 判断两个日期之间的天数 兼容ie,firefox
    jquery选择器大全
    原始ajax方式调用asp.net后台方法
    JavaScript及C# URI编码详解
    利用JQuery直接调用asp.net后台方法
    C#操作XML小结_转载
    从bnbt tracker源码分析bt客户端与traker的通信
    传说中的神器: shared_ptr/weak_ptr/scoped_ptr
  • 原文地址:https://www.cnblogs.com/downmoon/p/1942220.html
Copyright © 2011-2022 走看看