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

时间:2016-05-20 06:59:10

标签: c# dictionary combobox datasource automatic-properties

今天我遇到一个奇怪的问题,即将数据源绑定到具有autoproperty的词典。

  • IDE:Visual Studio 2015
  • 语言:C#
  • 用法:Windows窗体应用程序

我创建了一个字典,其中Auto属性为value:

词典:

/// <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; }
}

我正在使用字典中的interger作为可能性,按照我从另一个程序集中获取它们的顺序对项目进行排序。

以下是我如何使用条目填充字典的示例。

示例条目插入:

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。 一些示例数据:

  • ItemID:10203,ItemName:Test1234
  • ItemID:0815,ItemName:Test
  • ItemID:1,ItemName:Test1
  • ItemID:99999,ItemName:qwerty

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

1 个答案:

答案 0 :(得分:1)

如果您只想撤销订单,为何不使用time/1 Reverse方法?示例代码:

Array