c# – Wpf DataGrid重复列

前端之家收集整理的这篇文章主要介绍了c# – Wpf DataGrid重复列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要一个数据网格,其中包含重复的列,如下图所示.

这只是一个数据网格,并且重复了列.
我们怎么能用wpf windows datagrid做到这一点?

谢谢,

解决方法

我尝试以下列方式实现您的问题.

必须在列中定义一定数量的数据.但是这几个,我们希望它们在DataGrid中定义一个重复列.

假设它是已知的,至少大约是列数和行数.然后是要在DataGrid中设置的数据立方体.以下是我的评论示例.

XAML

  1. <Window x:Class="DataGridDynamicAddCol.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. Title="MainWindow" Height="350" Width="525"
  5. WindowStartupLocation="CenterScreen" ContentRendered="Window_ContentRendered">
  6.  
  7. <Grid>
  8. <DataGrid Name="DynamicColumnDataGrid" Loaded="DynamicColumnDataGrid_Loaded" AutoGenerateColumns="False"/>
  9. </Grid>
  10. </Window>

代码背后

  1. public partial class MainWindow : Window
  2. {
  3. // Create class with data
  4. // Note: Each parameter contains a list of values for it.
  5. public class Person
  6. {
  7. public Person()
  8. {
  9. FirstName = new List<string>();
  10. SecondName = new List<string>();
  11. Sample = new List<string>();
  12. }
  13.  
  14. public List<string> FirstName { get; set; }
  15.  
  16. public List<string> SecondName { get; set; }
  17.  
  18. public List<string> Sample { get; set; }
  19. }
  20.  
  21. // Number of columns
  22. const Int32 COLS = 3;
  23.  
  24. // Number of rows
  25. const Int32 ROWS = 3;
  26.  
  27. // Number repeats
  28. const Int32 RPTS = 3;
  29.  
  30. // Array of headers
  31. string[] HeadersArray = new string[COLS]
  32. {
  33. "FirstName","SecondName","Sample"
  34. };
  35.  
  36. // Array of values: Depends on the number of columns and rows
  37. // Note: The number of repetitions you can specify smaller amounts of data
  38. // If you specify more,then this place will be empty cells
  39. string[,] ValuesArray = new string[,]
  40. {
  41. {
  42. { "Andy","Caufmann","Artist"},{ "Sam","Fisher","Spy"},{ "Ben","Affleck","Actor"}
  43. },{
  44. { "Jim","Gordon","Sniper"},{ "Maria","Gray","Cleaner"},{ "Katy","Parry","Artist"}
  45. },{
  46. { "Jack","Rider","Hunter"},{ "Sven","Vath","DJ"},{ "Paul","Kalkbrenner","Super DJ"}
  47. }
  48. };
  49.  
  50. private List<Person> OnePerson;
  51.  
  52. public MainWindow()
  53. {
  54. InitializeComponent();
  55. }
  56.  
  57. private void Window_ContentRendered(object sender,EventArgs e)
  58. {
  59. OnePerson = new List<Person>();
  60.  
  61. // Create the columns
  62. for (int cols = 0; cols < COLS; cols++)
  63. {
  64. OnePerson.Add(new Person());
  65. }
  66.  
  67. // Create the rows
  68. for (int cols = 0; cols < COLS; cols++)
  69. {
  70. for (int rows = 0; rows < ROWS; rows++)
  71. {
  72. OnePerson[rows].FirstName.Add(ValuesArray[cols,rows,0]);
  73. OnePerson[rows].SecondName.Add(ValuesArray[cols,1]);
  74. OnePerson[rows].Sample.Add(ValuesArray[cols,2]);
  75. }
  76. }
  77.  
  78. DynamicColumnDataGrid.ItemsSource = OnePerson;
  79. }
  80.  
  81. private void DynamicColumnDataGrid_Loaded(object sender,RoutedEventArgs e)
  82. {
  83. // Create dynamically the columns and rows
  84. for (int rpts = 0; rpts < RPTS; rpts++ )
  85. {
  86. for (int cols = 0; cols < COLS; cols++)
  87. {
  88. DataGridTextColumn MyTextColumn = new DataGridTextColumn();
  89. MyTextColumn.Header = HeadersArray[cols];
  90.  
  91. // Binding values from HeadersArray
  92. MyTextColumn.Binding = new Binding(String.Format("{0}[{1}]",new object[]
  93. {
  94. HeadersArray[cols],rpts
  95. }
  96. ));
  97.  
  98. // Add column in DataGrid
  99. DynamicColumnDataGrid.Columns.Add(MyTextColumn);
  100. }
  101. }
  102. }
  103. }

产量

重复次数 – 3:

重复次数 – 2:

如果指定重复次数大于多维数据集中的重复次数,您将看到一张图片

这是合乎逻辑的,因为相关数据不可用.

注意:要使用绑定viewmodel,您需要确定适当的列表/集合,将它们设置为元素并将它们组合到单个数据立方体中.在我的示例中,静态数据,但您需要确定数据的来源,数据量,然后将它们放在一边并将它们放在数据立方体中.我认为,没有数据立方体,很难实现这种类型的东西(我尝试了不同的选项,使用转换器,直接从数组中绑定等).

猜你在找的C#相关文章