【问题标题】:How can I position a listbox to an item with a specific Valuemember?如何将列表框定位到具有特定 Valuemember 的项目?
【发布时间】:2019-05-20 04:45:25
【问题描述】:

我有一个带有列表框的 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。 那么如何仅从 value 成员设置 SelectedIndex 呢?

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

【问题讨论】:

  • 我认为只能通过循环来完成。碰巧我还有新名称或编辑名称的文本,所以我可以做 listbox.items,indexof(new MakerRecord(MakerID, textbox.text))。这适用于我的情况。

标签: c# winforms listbox selectedindex


【解决方案1】:

您可以使用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
    }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多