【问题标题】:Listbox won't display value列表框不会显示值
【发布时间】:2013-12-23 10:10:30
【问题描述】:

从我的用户控件中,我尝试在名为 PersonList 的列表框中显示值

用户控制代码:

BindingList<NotifiablePerson> PerSonList = new BindingList<NotifiablePerson>();

SqlCommand prsonListCmd = new SqlCommand("SQL QUERY", conn);
SqlDataReader dr = prsonListCmd.ExecuteReader();
 if (dr.HasRows)
   {
      while (dr.Read())
        {
           //collect value from database and save inside Fname and Lname variable

           NotifiablePerson np = PerSonList.AddNew();
           np.FirstName = Fname;
           np.LastName = Lname; 
        }               
  }
PersonList.DisplayMember = "np.FirstName" + "np.LastName";
PersonList.ValueMember = "np.FirstName";
PersonList.DataSource = PerSonList;

NotifiablePerson 类代码:

namespace SMS
{
 class NotifiablePerson : MyComponentModel.NotifyProperyChangedBase
  {
    private string _firstName;
    public string FirstName
        {
         get { return _firstName; }
         set{
             if (this.CheckPropertyChanged<string>("FirstName", ref _firstName, ref value))
             {
               this.DisplayNameChanged();
             }
            }
        }

    private string _lastName;
    public string LastName
        {
        get { return _lastName; }
        set{
           if (this.CheckPropertyChanged<string>("LastName", ref _lastName, ref value))
             {
              this.DisplayNameChanged();
             }
           }
        }

        public string DisplayName
        {
            get { return _firstName + " " + _lastName; }
        }

        private void DisplayNameChanged()
        {
            this.FirePropertyChanged("DisplayName");
        }
    }
}

但列表框只显示 SMS.NotifiablePerson 的列表,而不是我指定的实际值。这里我设置了valuemember。它可以正常工作并在侧边栏中显示相关值。但只有列表框不显示正确的值。

这段代码有什么问题?

【问题讨论】:

    标签: c# winforms listbox inotifypropertychanged


    【解决方案1】:

    尝试改变这一点:

    PersonList.DisplayMember = "np.FirstName" + "np.LastName";
    

    到这里:

    PersonList.DisplayMember = "DisplayName";
    

    【讨论】:

    • 对不起,应该是“DisplayName”没有“np.”,试试看
    • 我建议删除“np”。也来自 ValueMember,只是为了保持一致,它仍然可以工作。奇怪的是,当我认为它不应该为 ValueMember 工作时。
    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 2014-04-28
    • 2013-07-26
    • 1970-01-01
    • 2021-12-26
    • 2012-01-19
    • 2012-01-18
    相关资源
    最近更新 更多