簡體   English   中英

Sorted為true時,SelectedValue出現問題(ComboBox)

[英]Problem with SelectedValue when Sorted is true (ComboBox)

ComboBox.Sorted設置為trueComboBox.SelectedValue返回的值與可見選擇的值不同。

加載項目並顯示:

using (ModelContext model = new ModelContext())
{
    cbWorker.ValueMember = "IdWorker";
    cbWorker.DisplayMember = "FullName";

    bindingWorker.DataSource = model.Workers.Select(x => new ItemWorker{
            IdWorker = x.Id,
            FullName = x.FullName
        })
        .ToList();

    cbWorker.DataSource = bindingWorker;
}

private void CbWorker_SelectedValueChanged(object sender, EventArgs e)
{
    object x = cbWorker.SelectedValue;
    if (x!= null) label.Text = x.ToString();
}

如果ComboBox.Sorted = false ,則SelectedValue為OK:

在此輸入圖像描述

但是如果ComboBox.Sorted = true ,則SelectedValue不正常:

在此輸入圖像描述

有可能解決它嗎? CheckedListBox類似的問題。

設置ComboBox.Sortedfalse和排序bindingWorker.DataSourceIdWorker屬性:

cbWorker.Sorted = false;

...

bindingWorker.DataSource = model.Workers.Select(x => new ItemWorker{
            IdWorker = x.Id,
            FullName = x.FullName
        })
        .OrderBy(x => x.IdWorker)
        .ToList();

cbWorker.DataSource = bindingWorker;

cbWorker.ValueMember = "IdWorker";
cbWorker.DisplayMember = "FullName";

說明:

您的示例中有兩個問題:

  1. 在數據綁定的ComboBox上將ComboBox.Sorted設置為true
  2. 使用ComboBox.Sorted對ComboBox項進行數字排序

在數據綁定的ComboBox上將ComboBox.Sorted設置為true

ComboBox.Sorted屬性文檔:

嘗試在數據綁定控件上設置Sorted屬性會引發ArgumentException。 您必須使用基礎數據模型對數據進行排序。

在數據綁定的ComboBox上將ComboBox.Sorted設置為true可能不是一個好主意。 即使它沒有拋出異常,也可能導致意外行為。

使用ComboBox.Sorted對ComboBox項進行數字排序

一個簡單的測試可以顯示如果ComboBox.Sorted = true

  • 這些項目按ComboBox.DisplayMember排序
  • 這些項目按字符串排序(類似於item.ToString()

這意味着即使ComboBox.DisplayMember是一個數字類型,它也會在每個數字上調用ToString()之后進行排序,因此這些項目將按字母順序排序 ,而不是數字。

例如,如果數字10, 1, 3將直接排序為數值,它們將被排序為1, 3, 10 ,但如果數字將首先轉換為字符串( "10", "1", "3" )並且除了排序之外,它們將按字母順序排序"1", "10", "3"

結論

如果你想:

  • 對數據綁定的ComboBox排序
  • 字母順序排序ComboBox項目
  • DisplayMember以外的成員排序

你必須設定的項目,如前對項目進行排序ComboBox.DataSource並設置ComboBox.Sortedfalse

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM