如何将列表框放置到具有特定Valuemember的项目上? [英] How can I position a listbox to an item with a specific Valuemember?

查看:98
本文介绍了如何将列表框放置到具有特定Valuemember的项目上?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带表格框的Winform,其中的列表框带有一个struct列表的数据源,其中struct是:

I have a winform with a listbox with a datasource of list of struct, where the struct is:

    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"

and listbox.ValueMember = "MakerID" and listbox.DisplayMember = "MakerName"

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

The user can either select an item and the text (i.e. MakerName) is loaded to a textbox where it can be edited, or click an Add button and get an empty textbox.
After making changes to the textbox, the User clicks a Save button and the record is saved back to Database and the listbox is refreshed - which sets the SelectedIndex = -1.
All good.

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

But I want to position the listbox back to the record that was edited (or added) and all I have is the MakerID from the db operation. So how can I set SelectedIndex from just the value member?

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

Setting SelectedValue (i.e. lstbox.SelectedValue = MakerID) does not effect the SelectedIndex naturally.

推荐答案

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

You can use the SelectedItem property and pick the item you want

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

Using the struct you provided, here's a quick sample:

    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
    }

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

On the last line, you get to choose which item you want selected.

这篇关于如何将列表框放置到具有特定Valuemember的项目上?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆