带有行标题的网格视图以拆分组

时间:2018-04-30 13:39:53

标签: asp.net vb.net gridview

我希望了解如何在我的gridview中将结果分开,如下所示(请运行代码段以查看我想要的结果)。

我正在添加如下的gridview。

<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()  

这填充gridview没有问题,但我不知道如何添加该类型的子标头。我以前见过其他人这样做,但我不知道怎么做。

<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() 

1 个答案:

答案 0 :(得分:2)

请检查一下。

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();