如何在Windows窗体中显示数据集?

时间:2016-06-28 07:23:01

标签: c# winforms ado.net

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

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

请阅读此问题以获取相关信息。 compare databases (tables only) using C# and Ado.net

1 个答案:

答案 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,并且能够选择你想要展示的桌子让我知道

如何以动态方式添加控件

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

为了让它们可见,您需要:

  1. 将它们添加到父控件
  2. 找到他们
  3. 让它们可见。
  4. 添加到父控件很简单:

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