0

我正在开发一个 VB.NET 应用程序,它使用 DataGridView 控件来显示来自数据库的数据。目前显示如下:

54     john         NJ        HRA           1000   
54     john         NJ        DA            2500   
54     john         NJ        BP            12500

但我需要显示如下:

54      john  NJ
                     HRA           1000   
                     DA            2500
                     BP            12500

由于 ID、姓名和城市是重复的,我不需要再次显示这些。我怎样才能做到这一点?

4

3 回答 3

0

如果您所做的只是显示数据,您可以使用两个 SQL 语句的 UNION。

第一个将检索前三列加上两列空字符串 UNION SQL 三列空字符串和两列数据。第一个 SQL 语句的字段名称将命名列。

数据将是只读的。

    SELECT F1, F2, F3, '' as F4, '' as F5 WHERE ...
    UNION
    SELECT '', '', '', F4, F5 WHERE ...

如果您要检索多个目标的数据,则 SQL 会变得更复杂一些。

于 2013-05-28T17:57:24.510 回答
0

我认为这可以帮助你

DataTable dtDataSource = new DataTable();

dtDataSource.Columns.Add("A");
dtDataSource.Columns.Add("B");
dtDataSource.Columns.Add("C");

dtDataSource.Rows.Add(new object[] { "1", "1", "1" });
dtDataSource.Rows.Add(new object[] { "1", "1", "2" });
dtDataSource.Rows.Add(new object[] { "1", "1", "3" });
dtDataSource.Rows.Add(new object[] { "2", "1", "1" });
dtDataSource.Rows.Add(new object[] { "2", "1", "2" });
dtDataSource.Rows.Add(new object[] { "2", "1", "3" });

DataTable dtNew = dtDataSource.Clone();

for (int i = 0; i < dtDataSource.Rows.Count; i++)
{
    if (i > 0)
    {
        if (dtDataSource.Rows[i][0].Equals(dtDataSource.Rows[i - 1][0]))
        {
            dtNew.Rows.Add(new object[] { "", dtDataSource.Rows[i][1], dtDataSource.Rows[i][2] });
        }
        else
        {
            dtNew.Rows.Add(new object[] { dtDataSource.Rows[i][0], "", "" });
            dtNew.Rows.Add(new object[] { "", dtDataSource.Rows[i][1], dtDataSource.Rows[i][2] });
        }
    }
    else
    {
        dtNew.Rows.Add(new object[] { dtDataSource.Rows[i][0], "", "" });
        dtNew.Rows.Add(new object[] { "", dtDataSource.Rows[i][1], dtDataSource.Rows[i][2] });
    }
}

dataGridView1.DataSource = dtNew;

您的数据应首先订购。

我试图在这里转换 VB.Net

于 2013-05-28T08:53:29.933 回答
0

由于您的数据库的制作方式,您的问题正在发生。

你在使用主键和外键吗?

以便您可以轻松识别仅显示哪些记录

于 2013-06-03T07:46:26.333 回答