今天我遇到一个奇怪的问题,即将数据源绑定到具有autoproperty的词典。
我创建了一个字典,其中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。 一些示例数据:
我的客户希望订单被撤销。 (最后一个条目,但没有按ID排序)这就是为什么我有这个字典/ autoporperty设置的原因,在这里我可以简单地改变密钥的顺序。
答案 0 :(得分:1)
如果您只想撤销订单,为何不使用time/1
Reverse
方法?示例代码:
Array