如何在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>
答案 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查询。
答案 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)
答案 4 :(得分:0)
在Oracle中:
select name,wm_concat(task) as task from table name group by name
我在sql Server中不知道。但我认为这可能有所帮助。
在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
我从下面链接
获得了此查询答案 5 :(得分:0)
创建一个新类:
Class EmployeeWithTask{ string employeeName{get;set} list<string>employeeTasks {get,set}}
创建EmployeeWithTask列表。在您检索任务列表之后,对于结果循环中的每个不同员工,通过结果创建一个EmployeewithTask实例。 最后将EmployeeWithTask列表绑定到gridview