如何在windows窗体中显示数据集

本文关键字:显示 数据集 窗体 windows | 更新日期: 2023-09-27 17:52:45

我的应用程序接受任何数据库作为其输入,然后检测该数据库中的表,然后将所有表填充到DataSet中。现在数据集中有了数据库的图像。现在我的问题是如何将这个数据集显示为windows形式。

DataSet是动态的,因为每次它都会有n个表,每个表可以有任意数量的行和任意数量的列。

请根据上下文阅读这个问题。使用c#和Ado.net比较数据库(仅限表)

如何在windows窗体中显示数据集

显示表的最佳方式是使用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,并且能够选择你想要显示的表,请告诉我


如何动态添加控件

您需要决定如何添加它们,在这种情况下,它将在另一个下面。

要使它们可见,你需要:

  1. 添加到父控件
  2. 定位他们

添加父控件很简单:

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);行。