首页 > 解决方案 > 使用 OnDataBound asp:net gridview 合并单元格后对网格视图进行排序

问题描述

private void GridViewBind()
{
    SqlConnection Dbcon = new SqlConnection();
    Dbcon.ConnectionString = ConfigurationManager.ConnectionStrings[
    "ConnectionString"].ConnectionString;
    Dbcon.Open();

    string expSql = "SELECT [dName],[item],[cnt] FROM [Test1].[dbo].[Test3]
    ORDER BY [dName], [cnt] desc";
    SqlDataAdapter adAdapter = new SqlDataAdapter(expSql, Dbcon);
    DataSet ds = new DataSet();
    adAdapter.Fill(ds);

    GridView.DataSource = ds.Tables[0];
    GridView.DataBind();

    ViewState["dt"] = ds.Tables[0];
    ViewState["sort"] = "Desc";
}

我使用 gridview(asp:gridview) 绘制了一个表格,并创建了一个用于测试的数据库并绑定它然后,为了合并具有相同主题的单元格,使用 OnDataBound 合并单元格。

单击 cnt 时,我想按合并的主题进行排序但是,我的排序代码对整个 cnt 列进行排序,并且合并的单元格被解开。

我需要一种方法来保留合并的单元格并在其中进行 ASC/DESC 排序!

protected void OnDataBound(object sender, EventArgs e)
{
    for (int i = GridView2.Rows.Count - 1; i > 0; i--)
    {
        GridViewRow row = GridView2.Rows[i]; 
        GridViewRow previousRow = GridView2.Rows[i - 1];
        int j = 0;
        if (row.Cells[j].Text == previousRow.Cells[j].Text)
        {
            if (previousRow.Cells[j].RowSpan == 0)
            {
                if (row.Cells[j].RowSpan == 0)
                {
                    previousRow.Cells[j].RowSpan += 2;
                }
                else
                {
                    previousRow.Cells[j].RowSpan = row.Cells[j].RowSpan + 1;
                }
                row.Cells[j].Visible = false;

            }
        }
    }
}

标签: asp.netgridview

解决方案


我没有评论的声誉,所以我在这里评论回答。您可以在合并主题的位置添加 OnDataBound 代码吗?您也可以使用合并主​​题作为列进行选择查询,然后只需将数据直接绑定到gridview。

对于排序,您可以点击以下链接:

https://www.c-sharpcorner.com/UploadFile/b8e86c/paging-and-sorting-in-Asp-Net-gridview/

https://codepedia.info/gridview-sorting-header-click


推荐阅读