1

我想知道如何将多条记录制作成单个 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

4 回答 4

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

干杯

于 2013-03-05T19:49:40.463 回答
0

您可以在 SQL 中执行您的要求并返回一个数据集,您可以通过数据绑定来控制该数据集

于 2013-02-26T21:25:49.953 回答
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
于 2013-02-26T21:32:34.257 回答
0

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

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

 Dim helper As GridViewHelper = New GridViewHelper(sender)
    helper.RegisterGroup("colname", True, True)
    helper.ApplyGroupSort()
于 2013-02-26T21:44:20.347 回答