using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace BizHawk.Client.EmuHawk { public class DataTableDictionaryBind { public DataTable Table { get; private set; } public IDictionary Dictionary { get; private set; } public bool WasModified { get; private set; } public DataTableDictionaryBind(IDictionary Dictionary) { this.Dictionary = Dictionary; CreateTable(); } void CreateTable() { Table = new DataTable(); Table.Columns.Add("Key", typeof(TKey)); Table.Columns.Add("Value", typeof(TValue)); foreach (var kvp in Dictionary) Table.Rows.Add(kvp.Key, kvp.Value); Table.RowChanged += new DataRowChangeEventHandler(Table_RowChanged); WasModified = false; } void Table_RowChanged(object sender, DataRowChangeEventArgs e) { var key = (TKey)e.Row[0]; var value = (TValue)e.Row[1]; switch (e.Action) { case DataRowAction.Add: if (Dictionary.ContainsKey(key)) { e.Row.RejectChanges(); } else { Dictionary.Add(key, value); WasModified = true; } break; case DataRowAction.Change: Dictionary[key] = value; WasModified = true; break; case DataRowAction.Delete: Dictionary.Remove(key); WasModified = true; break; } } } }