如何将列表框定位到具有特定 Valuemember 的项目?
How can I position a listbox to an item with a specific Valuemember?
我有一个带有列表框的 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"
用户可以 select 将项目和文本(即 MakerName)加载到可以编辑的文本框,或者单击“添加”按钮并获得一个空文本框。
对文本框进行更改后,用户单击“保存”按钮,记录将保存回数据库并刷新列表框 - 设置 SelectedIndex = -1.
都好。
但我想将列表框定位回已编辑(或添加)的记录,而我所拥有的只是来自数据库操作的 MakerID。
那么如何仅从值成员设置 SelectedIndex 呢?
设置 SelectedValue(即 lstbox.SelectedValue = MakerID)自然不会影响 SelectedIndex。
您可以使用 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
}
在最后一行,您可以选择要选择的项目。
我有一个带有列表框的 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"
用户可以 select 将项目和文本(即 MakerName)加载到可以编辑的文本框,或者单击“添加”按钮并获得一个空文本框。
对文本框进行更改后,用户单击“保存”按钮,记录将保存回数据库并刷新列表框 - 设置 SelectedIndex = -1.
都好。
但我想将列表框定位回已编辑(或添加)的记录,而我所拥有的只是来自数据库操作的 MakerID。 那么如何仅从值成员设置 SelectedIndex 呢?
设置 SelectedValue(即 lstbox.SelectedValue = MakerID)自然不会影响 SelectedIndex。
您可以使用 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
}
在最后一行,您可以选择要选择的项目。