如何将列表框放置到具有特定Valuemember的项目上?

时间:2019-05-20 04:45:25

标签: c# winforms listbox selectedindex

我有一个带窗体框的​​Winform,其中的列表框带有结构列表的数据源,其中结构为:

    public struct MakerRecord
    {
      public int MakerID { get; set; }
      public String MakerName { get; set; }

      public MakerRecord(int ID, String Name)
      {
        MakerID = ID;
        MakerName = Name;
      }
    }

和listbox.ValueMember =“ MakerID” 和listbox.DisplayMember =“ MakerName”

用户可以选择一个项目,然后将文本(即MakerName)加载到可以对其进行编辑的文本框中,或者单击“添加”按钮并获得一个空文本框。
更改文本框后,用户单击“保存”按钮,记录将保存回数据库并刷新列表框-设置SelectedIndex = -1。
都好。

但是我想将列表框放回已编辑(或添加)的记录,而我所拥有的只是db操作中的MakerID。 那么如何仅从值成员设置SelectedIndex?

设置SelectedValue(即lstbox.SelectedValue = MakerID)自然不会影响SelectedIndex。

1 个答案:

答案 0 :(得分:0)

您可以使用SelectedItem属性并选择所需的项目

使用您提供的结构,这是一个快速示例:

    private void button1_Click(object sender, EventArgs e)
    {
        cmbMarkers.DataSource = null;
        var markerList = new List<MarkerRecord>
        {
            new MarkerRecord(1, "first"), new MarkerRecord(2, "second")
        };
        cmbMarkers.ValueMember = "MarkerId";
        cmbMarkers.DisplayMember = "MarkerName";
        cmbMarkers.DataSource = markerList;
        cmbMarkers.SelectedItem = markerList.FirstOrDefault(mr => mr.MarkerId == 2); //second item selected
    }

在最后一行,您可以选择要选择的项目。