将字典 <int, auto-property> 作为数据源绑定到组合框

Binding a dictionary<int, auto-property> as datasource to a combobox

今天我在使用自动 属性.

将数据源绑定到字典时遇到了一个奇怪的问题

我创建了一个以自动 属性 作为值的字典:

词典:

/// <summary>
/// Class that cotains names of various DMS items of the currently selected batch.
/// </summary>
internal class DMSItemDictionary : Dictionary<int, DMSItemName>
{
    /// <summary>
    /// Adds a DMS item to the dictionary.
    /// </summary>
    /// <param name="ItemKey">Key of the DMS item.</param>
    /// <param name="ItemID">ID of the DMS item.</param>
    /// <param name="ItemName">Name of the DMS item.</param>
    internal void Add(int ItemKey, int ItemID, string ItemName)
    {
        DMSItemName DMSItem = new DMSItemName(); // Creates a new DMS item auto property.
        DMSItem.ID = ItemID; // Sets the item ID.
        DMSItem.Name = ItemName; // Sets the item name.
        this.Add(ItemKey, DMSItem); // Adds the DMS item to the dictionary.
    }
}

自动 属性:

/// <summary>
/// Auto property that's used for DMS item names.
/// </summary>
internal class DMSItemName
{
    /// <summary>
    /// The ID of the DMS item.
    /// </summary>
    public int ID { get; set; }

    /// <summary>
    /// The name of the DMS item.
    /// </summary>
    public string Name { get; set; }
}

我正在使用字典中的整数来按照我从另一个程序集中获得的顺序对项目进行排序。

这是我如何用条目填充字典的示例。

示例条目插入:

Dictionaries.DMSItemDictionary DMSIndexComboBoxData = new Dictionaries.DMSItemDictionary();
for (int IndexCount = 0; IndexCount < DMSIndizes.Count; IndexCount++)
{
    int IndexID = DMSIndizes[IndexCount].ID;
    string IndexName = DMSIndizes[IndexCount].Name;
    DMSIndexComboBoxData.Add(IndexCount, IndexID, IndexName);
}

这是我如何绑定字典的示例。

示例数据绑定:

BindingSource DataSource = new BindingSource(DMSIndexComboBoxData, null);
DataGridViewComboBoxCell comboBoxIndizes = new DataGridViewComboBoxCell();
comboBoxIndizes.DisplayMember = "Value.Name";
comboBoxIndizes.ValueMember = "Value.ID";
comboBoxIndizes.DataSource = DataSource;

我的问题是只有字典中的第一个条目显示在组合框中。除了一切正常(正确的字段用作显示成员,正确的字段用作值成员。)

此外,如果我使用 foreach 和控制台写入遍历字典,所有条目都会正确返回。

谁能找到我遇到这个问题的原因?

非常感谢,Florian 'kami' Zedler

P.S。对不起,我的英语不好,如果您有任何问题,我会尝试进一步解释。

进一步说明: Dictionary 通过来自另一个程序集的函数以指定的顺序获取 populatet。 一些示例数据:

我的客户希望撤销该订单。 (最后一个条目在前,但不按 ID 排序)这就是为什么我有这个 dictionary/autoporperty 设置的原因,在这里我可以简单地更改密钥的顺序。

如果只是想颠倒顺序,为什么不用ArrayReverse方法呢?示例代码:

DMSItemName[] DMSIndizes = new DMSItemName[4];

//Sample data
DMSIndizes[0] = new DMSItemName();
DMSIndizes[0].ID = 10203;
DMSIndizes[0].Name = "Test1234";
DMSIndizes[1] = new DMSItemName();
DMSIndizes[1].ID = 0815;
DMSIndizes[1].Name = "Test";
DMSIndizes[2] = new DMSItemName();
DMSIndizes[2].ID = 1;
DMSIndizes[2].Name = "Test1";
DMSIndizes[3] = new DMSItemName();
DMSIndizes[3].ID = 99999;
DMSIndizes[3].Name = "qwerty";

var reversed = DMSIndizes.Reverse();
BindingSource DataSource = new BindingSource(reversed, null);
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Id";  
comboBox1.DataSource = DataSource;