Asp.net c#在gridview的单列中有多个值

时间:2012-06-20 19:44:46

标签: c# asp.net gridview webforms

如何在GridView的单个列中显示多个值?例如,当我在TextBox中搜索“Ivan”时,输出将返回多行Ivan,如下所示:

  

名称任务   
Ivan Task1   
Ivan Task2   
Ivan Task3

我想要这样的东西

  

名称任务   
Ivan Task1,Task2,Task3

我的表就像这样

  

员工(身份证,姓名)   
任务(ID,姓名)   
EmployeeTask (employee.id,task.id)

这是我的sql代码

SELECT  e.name,  t.name
FROM EmployeeTask et
INNER JOIN employee e ON e.id = et.employee_id
INNER JOIN task t ON t.id = et.task_id
WHERE e.name = @Name

这是我GridView标记

<Columns>
    <asp:BoundField DataField="name" HeaderText="Name" SortExpression="name"/>
    <asp:BoundField DataField="task" HeaderText="Task" SortExpression="task"/>        
</Columns>

6 个答案:

答案 0 :(得分:1)

在纯SQL中,这是一种获得所需结果的方法,然后您可以将其输入GridView:

SELECT     e.name, REPLACE(REPLACE(REPLACE
                          ((SELECT     t.name
                              FROM         EmployeeTask AS et INNER JOIN
                                                    task AS t ON t.id = et.task_id
                              WHERE     (et.employee_id = e.id)
                              FOR XML RAW(''), ELEMENTS)
                   , '</name><name>', ', '), '<name>', ''), '</name>', '') AS EmployeeTasks
FROM         employee AS e
WHERE     (e.name = @Name)

本质上,它是一个子查询,将任务展平为XML输出,然后用逗号替换标记。

答案 1 :(得分:1)

您必须更改SQL查询。

  • 如果您使用的是MySQL,则可以使用group_concat。
  • 如果您使用的是MSSQL,则可以找到答案here

答案 2 :(得分:0)

你需要使用这样的SQL连接任务名称,请注意我没有测试过脚本

    DECLARE @CTasks VARCHAR(500)
    SET @CTasks = ''

    SELECT @CTasks = @CTasks  + t.Task + ', ' FROM Employee e
    INNER JOIN Tasks t ON t.EmployeeId = e.Id
    WHERE e.Name = @Name
    ORDER BY e.Name ASC

    IF LEN(@CTasks) > 0
    SELECT @Name As Name, @CTasks As Tasks

You might end up getting a ',' at the end that needs taking care from Tasks column

Hope this helps...

答案 3 :(得分:0)

如果您正在使用mssql server 2008那么  有一个关于枢轴功能的介绍,它做同样的事情 你在问题中提到了

How to Use Pivot

希望你找到有用的

答案 4 :(得分:0)

在Oracle中:

select name,wm_concat(task) as task from table name group by name

我在sql Server中不知道。但我认为这可能有所帮助。

Similar Type Question, See it

在Sql中:

SELECT Field1, Substring(Field2, 2, LEN(Field2)) AS Field2 FROM
(
    SELECT
        [InnerData].Field1,
        (SELECT  ',' + Field2 FROM @Fields WHERE Field1=[InnerData].Field1 FOR XML PATH('')) AS Field2
        FROM
        (
            SELECT DISTINCT Field1 FROM @Fields
        ) AS [InnerData]
) AS OuterData

我从下面链接

获得了此查询

Refer this link

答案 5 :(得分:0)

创建一个新类:

Class EmployeeWithTask{ string employeeName{get;set} list<string>employeeTasks {get,set}}

创建EmployeeWithTask列表。在您检索任务列表之后,对于结果循环中的每个不同员工,通过结果创建一个EmployeewithTask实例。 最后将EmployeeWithTask列表绑定到gridview