【问题标题】:winform - setting Selected value of listboxwinform - 设置列表框的选定值
【发布时间】:2013-09-15 09:52:32
【问题描述】:

我有一个名为 listbox1 的列表框将绑定到这样的列表:

ValueVM word1 = new ValueVM { Id = 1, Name = "AAA" };
ValueVM word2 = new ValueVM { Id = 2, Name = "XBB" };
ValueVM word3 = new ValueVM { Id = 3, Name = "ACC" };
ValueVM word4 = new ValueVM { Id = 4, Name = "ACB" };
ValueVM word5 = new ValueVM { Id = 5, Name = "OTD" };
ValueVM word6 = new ValueVM { Id = 6, Name = "FDD" };

var li = new List<ValueVM>() { word1, word2, word3, word4, word5, word6 };
listBox1.DataSource = li.OrderBy(l=>l.Name).ToList();
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Id";

我想在这个列表框中选择一项,假设我想要Id=2;

int myID = 2;
//Idont know what the selected index will be but I need the selected value to be set
// I tried to set listBox1.SelectedValue=myId.ToString();
//but still returning null
listBox1.SelectedValue = myID;

如 MSDN 中所述:

获取或设置由 ValueMember 属性指定的成员属性的值。 (继承自 ListControl。)

我的问题是选择值从值成员获取值但没有设置值? 有任何想法吗?

【问题讨论】:

  • Name 是字段还是属性?字段不支持数据绑定
  • 我使用类 ValueVm 像这样class ValueVM { public int Id { get; set; } public string Name { get; set; } } 我确定它是财产 :(
  • @Eddy4v 您的代码事件无法编译,li.OrderBy(l=&gt;l.Name) 应附加ToList()。我还是没有得到你想要的?运行您的代码将选择XBB(带有Id=2),这不是您想要的吗?
  • @KingKing 编译但抛出运行时异常。你的意思是一样的吗?
  • @SriramSakthivel 啊,这就是我的意思。

标签: c# winforms listbox


【解决方案1】:

你只是在正确的方向。 SelectedValue 应该做你需要的。

listBox1.SelectedValue = 2;//this works for me

注意:您必须在此处设置int,因为数据源是int。设置“2”不起作用

【讨论】:

  • @KingKing 是的,相同,但这有效。可能是 OP 尝试不同并且发布不同。 OP 还声明listBox1.SelectedValue=myId.ToString(); 这不起作用当然这不起作用。 OP 会将其设置为字符串。
  • 谢谢 Sriram Sakthivel、Nemanja Boric、Alessandro D'Andria,它可以在我的代码没有更新的情况下运行!!!似乎错过了视觉工作室,当我重新启动它时它起作用了!为什么?我不知道!!!!
  • @Eddy4v 太奇怪了。我怀疑你已经设置了“2”。是吗?
  • @SriramSakthivel 我实际上都试过了,我知道两者都在工作,但似乎是 vs2010 的错误!!
【解决方案2】:

试试

listBox1.SetSelected(MyId, true);

看看this

【讨论】:

  • SetSelected 接受元素的索引而不是值。
  • 正如我之前提到的,我不想选择索引,SetSelected 会将我的 ID 分配给与我的 ID 不同的列表框的索引
  • 为什么不使用listBox1.SelectedItem = li[myID];
  • 谢谢 Sriram Sakthivel、Nemanja Boric、Alessandro D'Andria,它可以在我的代码没有更新的情况下运行!!!似乎错过了视觉工作室,当我重新启动它时它起作用了!为什么?我不知道!!!!
【解决方案3】:

你应该把你的代码改成这样的

 listBox1.DataSource = li.OrderBy(l=>l.Name).ToArray(); 

因为数据源不理解 IOrderedEnumerable

希望帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-28
    • 2012-06-19
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    相关资源
    最近更新 更多