2013-02-26 47 views
1

我想知道如何将多个记录合并到一个gridview行中。看看下面的例子。将多个记录合并为一个gridview行

数据来源:

FAMILY  GROUP    COLOR 
Dog   Poodle    Blue 
Dog   German Shepherd  Red 
Dog   Pitubll    orange 
Cat   Evil    Green 
Cat   Tabby    purple 

我试图创建一个GridView

 FAMILY  GROUP    COLOR 
=============================================== 
     |  | Poodle   | Blue 
ROW1 | DOG | German Shepherd | Red 
     |  | Pitbull   | Orange 
=============================================== 
     |  | Evil    | green 
ROW2 | CAT | tabby   | purple 

家庭列在下面看一下(如果有多个)将显示为一个单元,每个对应的子类别显示为其各自的行。

这样当用户选择该行时,选择了整个FAMILY类型的行。每行都基于FAMILY,因此无论组和颜色有多少行,它仍然是ONE行。本质上,gridview主要是显示关于家庭的信息,而GROUP/COLOR只是严格用于关于家庭的细节。

这是应该在SQL中完成还是通过Gridview绑定事件完成?我将如何实现我的目标?

如果我的解释不清楚,请让我知道,我会尽力澄清。

回答

3

谢谢向大家提供您的意见。

经过进一步的研究,我发现了以下内容,我想分享一下,以便至少有一部分回答这个问题。

该目标最终通过合并基于包含相同值的行的单元格实现。我用下面的链接作为参考:

http://forums.asp.net/t/1053747.aspx/1

http://www.c-sharpcorner.com/uploadfile/satyapriyanayak/ghrth/

我现在正在处理每一行(与多个子类别)为单排,我还没搞清楚呢。

被认为是通过上述链接回答的问题。核心代码如下(快速总结)使用OP中的给定示例。

数据源:

FAMILY  GROUP    COLOR 
Dog   Poodle    Blue 
Dog   German Shepherd  Red 
Dog   Pitubll    orange 
Cat   Evil    Green 
Cat   Tabby    purple 

在GridView的RowDataBound,使用以下结构(VB.NET)

CLASS LEVEL VARIABLES 
Protected familyName AS String 
Protected familyNameCell AS TableCell 

If e.Row.RowType = DataControlRowType.DataRow Then 

     If Me.familyName <> e.Row.Cells(0).Text Then 
      Me.familyName = e.Row.Cells(0).Text 
      Me.familyNameCell = e.Row.Cells(0) 

     Else 
      'remove cells from any column index 
      e.Row.Cells.RemoveAt(0) 

      'increase rowspan of any cell in column that had a cell removed 
      If Me.familyNameCell.RowSpan = 0 Then 
       Me.familyNameCell.RowSpan = 2 
      Else 
       Me.familyNameCell.RowSpan += 1 
      End If 
     End If 
End If 

干杯

0

你可以做你的要求在SQL并返回一个数据集,你可以进行数据绑定来控制

+0

有订购组和颜色没有好办法在SQL中当它们合并成一个字段时。 – Ceres 2013-02-26 21:32:49

+0

这样做的最好方法是使用公用表表达式。 – Valen 2013-02-26 21:38:14

0

我会做一个自定义类的集合,并结合,为您的网格。

Dim MyDataList As New List(Of MyData) 

'Populate list 

MyGrid.Datasource = MyDataList 
MyGrid.Databind() 

...

Public Class MyData 

    Public Property Family As String 
    Private _Groups As List(Of String) 
    Private _Colors As List(Of String) 

    Public Property Groups() As String 
     Get 
      Return String.Join(", ", _Groups) 
     End Get 
     Set(value As String) 
      _Groups.Add(value) 
     End Set 
    End Property 

    Public Property Colors() As String 
     Get 
      Return String.Join(", ", _Colors) 
     End Get 
     Set(value As String) 
      _Colors.Add(value) 
     End Set 
    End Property 

    Public Sub New(family As String) 

     Me._Family = family 
     Me._Groups = New List(Of String) 
     Me._Colors = New List(Of String) 

    End Sub 
End Class 
0

您可以使用gridviewhelper在GridView的分组,Grid View Helper

C#编写的,你可以用它在VB作为

Dim helper As GridViewHelper = New GridViewHelper(sender) 
    helper.RegisterGroup("colname", True, True) 
    helper.ApplyGroupSort()