我的应用程序将任何数据库作为其输入,然后检测该数据库中的表,然后将所有表填充到DataSet中。现在我在数据集中有数据库的图像。现在我的问题是如何将这个数据集显示为窗体。
DataSet是动态的,因为每次它都有n个表,每个表都可以有任意数量的行和任意数量的列。
请阅读此问题以获取相关信息。 compare databases (tables only) using C# and Ado.net
答案 0 :(得分:2)
显示表格的最佳方式是使用DataGridView(从现在开始的DGV)。问题是dgv能够显示一个表,只有一个表。
那你怎么做的?您需要有多个DGV(每个数据集表一个)或者有一些方法可以更改DGV显示的表格。
假设您决定拥有多个DGV。我不会介绍如何将它们添加到表格中,如果你想知道它,我会编辑答案。
您为数据集上的每个表创建一个DGV:
List<DataGridView> DGVs = new List<DataGridView>();
foreach (DataTable DT in DS.Tables){
DataGridView DGV = new DataGridView();
DGV.DataSource=DT;
DGVs.Add(DGV);
//Add code for adding them to the form
}
现在,您对数据集上的每个表都有一个DataGridView。
如果你想拥有一台DGV,并且能够选择你想要展示的桌子让我知道
如何以动态方式添加控件
你需要决定如何添加它们,在这种情况下它将是另一个。
为了让它们可见,您需要:
添加到父控件很简单:
form1.Contols.Add(DGV)
找到它们有点棘手,因为你希望它们中的每一个处于不同的位置,但相对于前一个位置。要执行此操作,您需要创建一个Point
,然后将其向下移动X像素。这样:
Point p = new Point(0,0); //Position of the first DGV, choose the one you want
p.Y += DGV.Height + 10; //Margin that you want
然后将DGV位置设置到
点DGV.Location = p;
然后只需要显示DGV
DGV.Show();
你可以在每个循环中完成所有操作,它将类似于:
List<DataGridView> DGVs = new List<DataGridView>();
Point p = new Point(0,0); //Position of the first DGV, choose the one you want
foreach (DataTable DT in DS.Tables){
DataGridView DGV = new DataGridView();
DGV.DataSource=DT;
DGVs.Add(DGV);
p.Y += DGV.Height + 10; //Margin that you want
DGV.Location = p;
this.Controls.Add(DGV);
DGV.Show();
}
请注意,如果您不需要DGV列表(在某些情况下它可能很有用),您可以忽略第一行和DGVs.Add(DGV);
行。