我在数据库中有一些学生的记录,我需要在嵌套网格中向用户显示这些数据。数据就像
Ali 20 Maths 80 100
Ali 20 Literature 60 100
Ali 20 English 80 100
Ahmad 20 Maths 70 100
Ahmad 20 Literature 60 100
Ahmad 20 English 90 100
John 20 Maths 80 100
John 20 Literature 80 100
John 20 English 80 100
我已经嵌套列表,其中包含学生姓名,年龄和每个学生的标记和科目列表。但我不明白如何将数据从数据库复制到列表而不重复任何学生。
任何形式的帮助都将受到赞赏。
答案 0 :(得分:1)
这听起来像是一个经典的主/细节场景,您可以在其中设置两个网格,一个包含学生数据,另一个包含标记。在学生网格中选择行时,标记网格将填充与所选学生相关的数据。 还有另一种选择。您可以使用已弃用的DataGrid并绑定到由DataRelation连接的DataTable,以实现嵌套的UI。您必须专门将此控件添加到工具箱中,因为您只会显示较新的DataGridView。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
DataTable dtStudents = new DataTable("Students");
dtStudents.Columns.Add(new DataColumn("StudentID", typeof(Int32)));
dtStudents.Columns.Add(new DataColumn("Name", typeof(string)));
dtStudents.Columns.Add(new DataColumn("Age", typeof(Int32)));
DataTable dtMarks = new DataTable("Marks");
dtMarks.Columns.Add(new DataColumn("StudentID", typeof(Int32)));
dtMarks.Columns.Add(new DataColumn("Mark", typeof(Int32)));
DataRow dr = dtStudents.NewRow();
dr["StudentID"] = 100;
dr["Name"] = "Bob";
dr["Age"] = 20;
dtStudents.Rows.Add(dr);
dr = dtStudents.NewRow();
dr["StudentID"] = 200;
dr["Name"] = "Sally";
dr["Age"] = 10;
dtStudents.Rows.Add(dr);
dr = dtStudents.NewRow();
dr["StudentID"] = 300;
dr["Name"] = "Joe";
dr["Age"] = 30;
dtStudents.Rows.Add(dr);
dr = dtMarks.NewRow();
dr["StudentID"] = 100;
dr["Mark"] = 80;
dtMarks.Rows.Add(dr);
dr = dtMarks.NewRow();
dr["StudentID"] = 100;
dr["Mark"] = 70;
dtMarks.Rows.Add(dr);
dr = dtMarks.NewRow();
dr["StudentID"] = 100;
dr["Mark"] = 60;
dtMarks.Rows.Add(dr);
dr = dtMarks.NewRow();
dr["StudentID"] = 200;
dr["Mark"] = 80;
dtMarks.Rows.Add(dr);
dr = dtMarks.NewRow();
dr["StudentID"] = 200;
dr["Mark"] = 80;
dtMarks.Rows.Add(dr);
dr = dtMarks.NewRow();
dr["StudentID"] = 300;
dr["Mark"] = 75;
dtMarks.Rows.Add(dr);
dr = dtMarks.NewRow();
dr["StudentID"] = 100;
dr["Mark"] = 99;
dtMarks.Rows.Add(dr);
DataSet ds = new DataSet();
ds.Tables.Add(dtStudents);
ds.Tables.Add(dtMarks);
DataRelation drStudentId = new DataRelation(
"StudentID_Relation", ds.Tables[0].Columns["StudentID"],
ds.Tables[1].Columns["StudentID"], true);
ds.Relations.Add(drStudentId);
dataGrid1.DataSource = ds.Tables["Students"];
}
}
你得到这样的用户界面:" +"行标题中的标志以扩展为子数据。