将一行拆分为两行或在单行中添加两个实体

时间:2017-01-05 12:29:14

标签: c# visual-studio-2012 datagridview

我想在datagridview中表示数据,如下所述。我有谷歌它的答案,但没有成功。我已经成功添加了colums(学生姓名),但没有成功添加主题和标记。我尝试使用Datatable概念和单元格复制但没有结果。

enter image description here

            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的示例图片。有人可以知道怎么做吗?

感谢。

1 个答案:

答案 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。