111,113
社区成员




binding = new System.Windows.Data.Binding("Age");
dataColumn.Binding = binding;
List<Dictionary<string, string>> dictList = new List<Dictionary<string, string>>();
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("Id", "1");
dict.Add("Name", "tome");
dict.Add("Age", "25");
dictList.Add(dict);
dataGrid.ItemsSource = dictList;
binding = new System.Windows.Data.Binding("Age");
binding.Mode = System.Windows.Data.BindingMode.OneWay;
DataGridTextColumn dataColumn = null;
dataColumn = new DataGridTextColumn();
dataColumn.Header = "Age";
var list = new List<Dictionary<string, string>>();
for (var i = 0; i < 5; i++)
{
var dict = new Dictionary<string, string> { { "苹果", (i * 5).ToString() }, { "香蕉", (i * 5).ToString() }, { "橘子", (i * 5).ToString() } };
list.Add(dict);
}
绑定数据:
var first = list.First();
var dataGrid = new DataGrid {AutoGenerateColumns = false};
foreach (var node in first)
{
dataGrid.Columns.Add(new DataGridTextColumn { Header = node.Key, Binding = new Binding(string.Format("[{0}]",node.Key)) });
}
dataGrid.ItemsSource = list;
public static class Extensions
{
public static DataTable ConvertToTable(this IEnumerable<ExpandoObject> dictList)
{
var tbl = new DataTable();
DataColumn col;
DataRow row;
IDictionary<string, object> dict;
object value;
foreach (var x in dictList)
{
row = tbl.NewRow();
dict = (IDictionary<string, object>)x;
foreach (var k in dict.Keys)
{
col = tbl.Columns[k];
value = dict[k];
if (col == null)
col = tbl.Columns.Add(k, value.GetType());
row[col] = value;
}
tbl.Rows.Add(row);
}
return tbl;
}
}
使用例如:dynamic dict = new ExpandoObject();
dict.Id = 1;
dict.Name = "tome";
dict.Age = 25;
dict.XX = DateTime.Now;
dict.YY = dict.Age + 80;
var dictList = new List<ExpandoObject> { dict };
你可以看到,dict对象里边的属性可以是各种类型的,不一定只是string类型的。public static class Extensions
{
public static DataTable ConvertToTable(this List<Dictionary<string, string>> dictList)
{
var tbl = new DataTable();
DataColumn col;
DataRow row;
foreach (var x in dictList)
{
row = tbl.NewRow();
foreach (var k in x.Keys)
{
col = tbl.Columns[k];
if (col == null)
col = tbl.Columns.Add(k, typeof(string));
row[col] = x[k];
}
tbl.Rows.Add(row);
}
return tbl;
}
}
例如可以使用List<Dictionary<string, string>> dictList = new List<Dictionary<string, string>>();
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("Id", "1");
dict.Add("Name", "tome");
dict.Add("Age", "25");
dictList.Add(dict);
var table = dictList.ConvertToTable();
另外,我要告诉你,.net有一个专门做动态类型的 ExpandoObject 类,而且许多框架(例如MongoDB、NewtoneSoft.Net 等等)都直接支持它。你不需要自己发明车轮子,你发明的那个类的框架兼容性没有 ExpandoObject 类型那么好。。
Binding binding = new System.Windows.Data.Binding("Value");
//...省略
this.DataGridTest.ItemsSource = dictList[0];
List<Dictionary<string, string>> 你这样存储数据 看不出来有任何意义。
Dictionary的key 是不可能重复的,你再给添加到List里,有点多余了。