【问题标题】:Grid view with row headers to split groups带有行标题的网格视图以拆分组
【发布时间】:2026-02-09 01:55:02
【问题描述】:

我正在寻找如何在我的 gridview 中分离我的结果,如下所示(请运行 sn-p 以查看我想要的结果)。

我正在添加如下所示的网格视图。

<asp:GridView ID="gv" runat="server" CssClass="gvadmin"  PageSize="19" AllowPaging="true" OnPageIndexChanging="gv_PageChanging" AutoGenerateSelectButton="true" AutoGenerateEditButton="true" OnRowEditing="gv_RowEdit" OnSelectedIndexChanged="gv_SelectChanged" />

从类中存储的sql连接填充gridview。

gv.DataSource = c.sqldt
gv.DataBind()  

这会毫无问题地填充网格视图,但我不知道如何添加该类型的子标题。我以前见过别人这样做,但我不知道怎么做。

<table border="1">
<tr>
<td>ID</td>
<td>type</td>
<td>name</td>
</tr>
<tr>
<td>Person</td>
<td></td>
<td></td>
</tr>
<tr>
<td>1</td>
<td>person</td>
<td>John</td>
</tr>
<tr>
<td>2</td>
<td>person</td>
<td>Amy</td>
</tr>
<tr>
<td>animal</td>
<td></td>
<td></td>
</tr>
<tr>
<td>3</td>
<td>animal</td>
<td>Max</td>
</tr>
<tr>
<td>4</td>
<td>animal</td>
<td>fifi</td>
</tr>
</table>

我想要每种类型的标题。

数据将是 sql 驱动的,因此使用 sql 查询,我没有问题将数据获取到 gridview,但我如何添加“类型”标题来分解它们。

我已经尝试使用多个数据表到 1 个数据集中进行以下操作,但无法使其正常工作。

        Dim sqlstr As String = "select distinct(type) from typestbl order by type"
    Dim sqlstr2 As String = "select Names,Age from Typestbl order by names where type = @type"


    Dim i As Integer = 0
    s.FillDS(sqlstr)
    For Each row As DataRow In s.sqldt.Rows

        dt = New DataTable
        dt.Columns.Add("Names")
        dt.Columns.Add("Age")
        Dim r As DataRow = dt.NewRow
        r("Names") = row.Item(0).ToString
        r("Age") = ""
        dt.Rows.Add(r)


        ds.Merge(dt)

        s.FillDS2()
        ds.Merge(s.sqldt2)

    Next

    gv.DataSource = ds
    gv.DataBind() 

【问题讨论】:

  • 通常,Stack Overflow不是免费的编码服务。
  • 基本上您可以使用两种方法:在您的服务器代码中创建一个数据表,其中包含与您的示例类似的数据或拥有一些 javascript(您可以使用这些库,例如 jspreadsheets)。如果您没有使用 javascript 的经验,第一个更简单,但对于单个 SO 问题来说,两者都太宽泛了。
  • 感谢您的回复 IvanH。我的问题是如何创建该格式的数据表。我有一张三列的桌子。类型、姓名、年龄 我需要显示带有标题的结果。动物 fifi - 最多 4 人 - 7 人 john -30 amy - 25 我很难正确解释。到目前为止,我已经尝试将多个数据表添加到循环中的数据集,但这没有奏效。我已经添加了我尝试过的代码。

标签: asp.net vb.net gridview


【解决方案1】:

请检查一下。

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString);
    SqlCommand cmd = new SqlCommand("Select Queueid,queueitem,queuedata,itemgrouptype,itemgroup from queueitems order by itemgrouptype,itemgroup", con);
    DataSet ds = new DataSet();
    SqlDataAdapter adp = new SqlDataAdapter(cmd);
    adp.Fill(ds);
    GridView1.DataSource = ds.Tables[0].DefaultView;
    GridView1.DataBind();
    string first = "";
    for(int i=0;i<ds.Tables[0].Rows.Count;i++)
    {

        if (ds.Tables[0].Rows[i][3].ToString() != first)
        {
            DataRow dr = ds.Tables[0].NewRow();
            dr[0] = ds.Tables[0].Rows[i][3].ToString();
            first = ds.Tables[0].Rows[i][3].ToString();
            ds.Tables[0].Rows.InsertAt(dr, i);

        }

    }
    GridView1.DataSource = ds.Tables[0].DefaultView;
    GridView1.DataBind();

【讨论】:

  • 我现在就试试。谢谢你。正在努力将其转换为vb。试过后会更新的。
  • 很抱歉,我很痛苦。谁能帮我将此位转换为 vb.net for(int i=0;i
  • 有很多在线转换器可用。
  • 我明白了。前两个转换器让我失望了。非常感谢。完美的回应。你救了我。干杯加根深
最近更新 更多