我想在datagridview中表示数据,如下所述。我有谷歌它的答案,但没有成功。我已经成功添加了colums(学生姓名),但没有成功添加主题和标记。我尝试使用Datatable概念和单元格复制但没有结果。
int Selectedindex = comboBox3.SelectedIndex;
Equipment slectedEq = m_equipmentList.ElementAt(Selectedindex); // I am explaining data structure (original data is different) as a students data which is stored in "m_equipmentList"
string P_chname;
DataTable Dt = new DataTable();
for (int i = 0; i < slectedEq.m_ChannelAccess.Count; i++)
{
ChannelAccess chAccess = m_equipmentList.ElementAt(Selectedindex).m_ChannelAccess.ElementAt(i);
P_chname = slectedEq.m_ChannelAccess.ElementAt(i).m_deviceName;// example: here I get student Name
Dt.Columns.Add(P_chname);
for (int j = 0; j < slectedEq.m_ChannelAccess.ElementAt(i).m_Parameters.Count; j++)
{
string prName;
string prValue;
prName= chAccess.m_Parameters.ElementAt(j).m_paramName; // Here i get subject name
prValue = chAccess.m_Parameters.ElementAt(j).m_ParamValue;// Here i get subject marks
object[] RowValues = { "", "" };
//assign values into row object
RowValues[0] = prName;
RowValues[1] = prValue;
//create new data row
DataRow dRow;
dRow = Dt.Rows.Add(RowValues);
Dt.AcceptChanges();
}
dataGridView1.DataSource = Dt;
}
以上是我想添加dataviewgrid的示例图片。有人可以知道怎么做吗?
感谢。
答案 0 :(得分:1)
我觉得这对DataGridView
很难,我建议使用两个嵌套的ItemsControl
:
<ItemsControl ItemsSource="{Binding to some IEnumerable<Student>, Mode=OneWay}">
<!-- template for each student -->
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type Student}">
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Name}"/>
<ItemsControl ItemsSource="{Binding Subjects, Mode=OneWay}">
<!-- template for each subject -->
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type Subject}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Mark}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
<!-- template for the inner control -->
<ItemsControl.Template>
<ControlTemplate>
<StackPanel Orientation="Horizontal">
<ItemsPresenter/>
</StackPanel>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl.ItemTemplate>
<!-- template for the outer control -->
<ItemsControl.Template>
<ControlTemplate>
<StackPanel Orientation="Horizontal">
<ItemsPresenter/>
</StackPanel>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
假设您的学生定义与此相似:
class Student
{
string Name{ get; set; }
IEnumerable<Subject>{ get; set; }
}
和类似的主题:
class Subject
{
string Name{ get; set; }
int Mark{ get;set; }
}
您可能需要添加一些Borders
并定义一些Width
以使其看起来不错。此外,如果您要修改名称和标记,可能需要将TextBlock
替换为TextBox
es。