【问题标题】:how to bind dictionary to datagrid wpf如何将字典绑定到datagrid wpf
【发布时间】:2015-07-02 10:45:27
【问题描述】:

我正在尝试将字典绑定到 datagrid ,目前找不到明确的方法来执行 if。 字典键应该是网格标题,它的值应该是列数据。 例如 C#代码:

var dictionary  = new Dictionary<string,string>();
dictionary.Add("First Name","Name");
dictionary.Add("Last Name","Last Name");  
dictionary.Add("Phone","+123-123-123");

意思是我希望我的数据网格有 3 个列:

  • 名字
  • 姓氏
  • 电话

有没有办法将具有未知数量 Keys 的字典绑定到 datagrid ? 现在我正在使用 Datatable 谢谢

【问题讨论】:

  • 按照你定义它的方式,这个数据网格总是只有 1 行,没有多大意义

标签: c# wpf dictionary datagrid


【解决方案1】:

做你想做的最好的方法如下:

CodeBehind 中,您可以创建Anonymus 对象的列表,如果您没有模型,并在构造函数中填充列表并添加到DataGridItemsSource

List<Object> mylist = new List<Object>(){
new {FirstName="myfirstName1", LastName="mylastName1", Phone="+123-123-123"},
new {FirstName="myfirstName2", LastName="mylastName2", Phone="+124-124-124"},
new {FirstName="myfirstName3", LastName="mylastName3", Phone="+125-125-125"}
}

this.myDataGrid.ItemsSource = myList;

XAML 中放置以下代码,作为DataGrid 的声明:

<DataGrid x:Name="MyDataGrid" AutoGenerateColumns="false"   >
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding FirsName}" Header="First name"  />
        <DataGridTextColumn Binding="{Binding LastName}" Header="Last name"  />
        <DataGridTextColumn Binding="{Binding Phone}" Header="Phone"  />
    </DataGrid.Columns>
</DataGrid>

【讨论】:

  • 第一次估计没说清楚,字段(键)的数量不知道。
  • 我想我第一次并不清楚,字段(键)的数量是未知的,也没有名称。如果不适用于匿名对象,仍然必须创建具有已定义属性的对象。
  • 你想做什么?你能告诉我你对这个解决方案的意图是什么?
  • 你不觉得垂直显示属性比水平显示列的形式更好吗?如果您垂直执行此操作,他们使用 Dictionary 的解决方案肯定是最好的。
【解决方案2】:

我会尝试更具体。 假设我正在获取一个对象列表,例如 table 。 每个表可以有不同的数据结构和不同的行数。 所以我不能绑定到任何数据结构。 目前我找到的最好的解决方案是通过网格绑定到 DataTable

var selectedTable = new DataTable();
        if (tableEntities.Any())
        {
            var colunms = table.Properties;
            foreach (var colunm in colunms)
            {
                selectedTable.Columns.Add(colunm.Key);
            }

            foreach (var entity in tableEntities)
            {
                var row = selectedTable.NewRow();
                foreach (var property in entity.Properties)
                {
                    row[property.Key] = property.Value.GetStringValue();
                }
                selectedTable.Rows.Add(row);
            }

但我不喜欢这个解决方案

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 2021-05-29
    • 2014-08-23
    • 2014-10-23
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多