将多个记录分组/合并为一个gridview行

时间:2013-02-26 21:10:30

标签: asp.net vb.net gridview row

我想知道如何将多个记录放入单个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类型的整行。每一行都基于FAMILY,因此无论组和颜色中有多少行,它仍然是一个行族。基本上gridview主要是显示有关FAMILY的信息,GROUP / COLOR只是严格用于有关该系列的详细信息。

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

如果我的解释不清楚,请告诉我,我会尽力澄清。

4 个答案:

答案 0 :(得分: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

干杯

答案 1 :(得分:0)

您可以在SQL中执行您的要求并返回可以数据绑定以控制的数据集

答案 2 :(得分: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

答案 3 :(得分:0)

您可以使用gridviewhelper在gridview中进行分组,Grid View Helper

用c#编写,你可以在vb中使用

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