从多个列检索数据并在单个列中显示

时间:2012-01-06 01:57:56

标签: c# asp.net sql

我正在使用VS2005 C#和SQL2005。

我想从多个列中检索数据并合并它们,用逗号分隔它们。

E.g。我的SQL表中的数据 UserData

No. | Username | Role 1 | Role 2 | Role 3 |

1 | Jimmy | USER | READONLY | WRITE |

数据我想在我的GridView GridView1 中显示:

No. | Username | Roles |

1 | Jimmy | USER, READONLY, WRITE |

如何使用SELECT语句合并3列中的数据并合并它们,用逗号分隔数据并在GridView中列出它们?

谢谢


修改

我尝试过使用Shark和Mun提供的方法,但是如果Role列中的数据为空,我想删除逗号。

现在的情况是,如果Role 2和Role 3为空,Roles列将如下所示: USER,,

我是否知道如何将,分组到变量中,以便在值为空时不会显示?

2 个答案:

答案 0 :(得分:2)

您应该在存储过程中执行此操作,然后将GridView绑定到该存储过程:

SELECT No., Username, CAST(Role1 AS varchar(1024)+ ', ' + Role2 + ', ' + Role3)

答案 1 :(得分:1)

这是SQL查询:

select
    username,
    isnull(nullif([role 1], '') + ', ', '') + 
    isnull(nullif([role 2], '') + ', ', '') + 
    isnull(nullif([role 3], ''), '') as Roles
from UserData

然后为您的网格视图代码:

SqlConnection conn = new SqlConnection(YourConnectionStringHere);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = 
    "select " +
    "    username, " +
    "    isnull(nullif([role 1], '') + ', ', '') + " +
    "    isnull(nullif([role 2], '') + ', ', '') + " +
    "    isnull(nullif([role 3], ''), '') as Roles " +
    "from UserData";

SqlDataAdapter sda = new SqlDataAdapter(cmd);
Datatable YourData = new DataTable();

try
{
    sda.Fill(YourData);

    GridView1.DataSource = YourData;
    GridView1.Bind();
}
catch
{
    sda.Dispose();
    // handle your error
}