Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:字典<;int,List<;字符串>&燃气轮机;在数据网格中_C#_Wpf_Datagrid - Fatal编程技术网

C# WPF:字典<;int,List<;字符串>&燃气轮机;在数据网格中

C# WPF:字典<;int,List<;字符串>&燃气轮机;在数据网格中,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一本字典。每个ID(int)都有一个对应的动态名称列表(list) 这是Datagrid中的预期输出 ID | Name | Name | Name 1 Ash Tina Kara 2 Kc 3 Star Lara 我如何做到这一点 <DataGrid x:Name="dg" ItemsSource="{Binding Dic}" AutoGenerateColumns="False"> <DataGri

我有一本
字典
。每个ID(int)都有一个对应的动态名称列表(
list

这是Datagrid中的预期输出

ID | Name | Name | Name
1    Ash    Tina   Kara
2    Kc     
3    Star   Lara
我如何做到这一点

 <DataGrid x:Name="dg" ItemsSource="{Binding Dic}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="id" Binding="{Binding Key}"/>
                <DataGridTextColumn Header="Name" Binding="{Binding Value[0]}"/>
                <DataGridTextColumn Header="Name" Binding="{Binding Value[1]}"/>
                <DataGridTextColumn Header="Name" Binding="{Binding Value[2]}"/>
            </DataGrid.Columns>
        </DataGrid>
好的,这是我的代码:

 <DataGrid x:Name="dg" ItemsSource="{Binding Dic}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="id" Binding="{Binding Key}"/>
            </DataGrid.Columns>
        </DataGrid>


private Dictionary<int, List<string>> dic;

        public Dictionary<int, List<string>> Dic
        {
            get { return dic; }
            set { dic = value; }
        }

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
            Dic = new Dictionary<int, List<string>>();
            Dic.Add(1, new List<string> { "a", "b", "c", "5" });
            Dic.Add(2, new List<string> { "d" });
            Dic.Add(3, new List<string> { "e", "f" });

            int count = 0;
            foreach (List<string> lst in Dic.Values)
            {
                if (lst.Count > count)
                {

                    for (int i = count; i < lst.Count; i++)
                    {
                        DataGridTextColumn column = new DataGridTextColumn();
                        column.Header = "name" + i;
                        column.Binding = new Binding(string.Format("Value[{0}]", i));
                        dg.Columns.Add(column);
                    }
                    count = lst.Count;
                }
            }


        }

私人词典;
公共词典
{
获取{return dic;}
设置{dic=value;}
}
公共主窗口()
{
初始化组件();
this.DataContext=this;
Dic=新字典();
增加(1,新名单{“a”、“b”、“c”、“5”});
增加(2,新名单{“d”});
增加(3,新名单{“e”,“f”});
整数计数=0;
foreach(列出Dic.值中的lst)
{
如果(lst.Count>Count)
{
for(int i=count;i

但是我希望您自己完成它

您是否尝试绑定到字典的
集合?将
字典.Values
集合设置为
ItemsSource
并启用
AutoGenerateColumns=True

是否确实需要
DataGrid
?为什么不将
ListView
与自定义模板或其他东西一起使用呢。只要ListView是可编辑的,就可以了。谢谢,但是名称的列数应该是动态的。它可能不止3个。简单易用的解决方案,但网格是不可编辑的。你能不能也为这个@Rang发布代码,以便按行显示数据?谢谢,谢谢!我会完成的。很抱歉,我是WPF的新手。如何使用这种方法在单元格上应用模板?
 <DataGrid x:Name="dg" ItemsSource="{Binding Dic}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="id" Binding="{Binding Key}"/>
            </DataGrid.Columns>
        </DataGrid>


private Dictionary<int, List<string>> dic;

        public Dictionary<int, List<string>> Dic
        {
            get { return dic; }
            set { dic = value; }
        }

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
            Dic = new Dictionary<int, List<string>>();
            Dic.Add(1, new List<string> { "a", "b", "c", "5" });
            Dic.Add(2, new List<string> { "d" });
            Dic.Add(3, new List<string> { "e", "f" });

            int count = 0;
            foreach (List<string> lst in Dic.Values)
            {
                if (lst.Count > count)
                {

                    for (int i = count; i < lst.Count; i++)
                    {
                        DataGridTextColumn column = new DataGridTextColumn();
                        column.Header = "name" + i;
                        column.Binding = new Binding(string.Format("Value[{0}]", i));
                        dg.Columns.Add(column);
                    }
                    count = lst.Count;
                }
            }


        }