C # GUI элемент управления для редактирования словаря - PullRequest
2 голосов
/ 23 февраля 2009

Существует ли стандартный элемент управления, позволяющий пользователю редактировать пары ключ-значение словаря строк в строки?

Если нет, то как бы вы это реализовали? У меня есть несколько идей, но ни одна из них не кажется великолепной.

Ответы [ 2 ]

7 голосов
/ 23 февраля 2009

Нет, нет встроенного. Для его реализации; как насчет 2-столбца DataGridView, реализующего IDataErrorInfo так, что дублированные ключи приводят к появлению красного шарика ошибки:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows.Forms;
class Pair : IDataErrorInfo
{
    internal IList<Pair> Parent { get; set; }
    public string Key { get; set; }
    public string Value { get; set; }

    string IDataErrorInfo.Error
    {
        get { return ""; }
    }

    string IDataErrorInfo.this[string columnName]
    {
        get
        {   
            if(columnName == "Key" && Parent != null && Parent.Any(
                x=> x.Key == this.Key && !ReferenceEquals(x,this)))
            {
                return "duplicate key";
            }
            return "";        
        }
    }
}

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        BindingList<Pair> pairs = new BindingList<Pair>();
        // todo: fill from StringDictionary
        pairs.AddingNew += (s,a) =>
        {
            a.NewObject = new Pair { Parent = pairs };
        };
        Application.Run(new Form {
            Controls = {new DataGridView {
                Dock = DockStyle.Fill,
                DataSource = pairs
            }}
        });
    }
}
1 голос
/ 23 февраля 2009

Просто составьте список и свяжите их с сеткой. Быстро и просто.

РЕДАКТИРОВАТЬ: вот пример, предполагается, что у вас есть форма с GridView на нем.

Dictionary<string, string> d;
protected void Page_Load(object sender, EventArgs e)
{
d = new Dictionary<string, string>();
d.Add("key 1", 1);
d.Add("key 2", 2);
d.Add("key 3", 3);
d.Add("key 4", 4);
d.Add("key 5", 5);

GridView1.DataSource = d;
GridView1.DataBind();

}

Для обработки ошибок и т. Д., Проверьте ответ Марка. Возможно, вы захотите еще немного изучить связывание данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...