简体   繁体   English

如何在网格视图中对特定列进行分组

[英]How to group specific column in grid view

In Grid view I am having one field Items Group. 在网格视图中,我只有一个字段“项目组”。 I want to group all the Item group values together in gridview row wise with header name as Itemgroup . 我想将所有项目组值一起分组在gridview行中,标题名称为Itemgroup Like Header Text as Itemgroup values followed by its values respectfully. 像标题文本一样是项目组值,然后是其值。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" HorizontalAlign="Center">
    <Columns>
        <asp:TemplateField HeaderText="Item Name">
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Eval("TestItemName") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Items Group">
            <ItemTemplate>
                <asp:Label ID="lblGroup" runat="server" Text='<%# Eval("TestItemGroup") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Value">
            <ItemTemplate>
                <asp:TextBox ID="txtItemGroup" runat="server" Text='<%# Eval("ItemGroup") %>'></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField Visible="false">
            <ItemTemplate>
                <asp:Label ID="lblGroup12" runat="server" Text='<%# Eval("TestItemID") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="">
            <ItemTemplate>
                <asp:Label ID="lblItemValue" runat="server" Text='<%# Eval("TestItemValues") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Default Values">
            <ItemTemplate>
                <asp:Label ID="lblDefaultValues" runat="server" Text='<%# Eval("DefaultValues") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView> 

Binding Grid view in .cs: .cs中的绑定网格视图:

        int ID = Convert.ToInt32(txtID.Text);
        sqlstr = "select * from Test_Items where TestID = '" + ID + "'";
        SqlDataAdapter da = new SqlDataAdapter(sqlstr, con);
        DataSet ds = new DataSet();
        da.Fill(ds);
        if (ds != null && ds.Tables[0].Rows.Count > 0)
        {
            GridView1.DataSource = ds;
            GridView1.DataBind();
            btnSend1.Visible = true;
        }
        else
        {
            ScriptManager.RegisterStartupScript(this, GetType(), "", "alert('Invalid ID (or) No Data to Display..!');", true);
        }

For Better understanding Ex: http://www.pathology-software.com/images/pathology-software/patholgy-screenshot7.jpg 为了更好地理解,例如: http : //www.pathology-software.com/images/pathology-software/patholgy-screenshot7.jpg

Thank you in Advance 先感谢您

You can inject the needed separator rows by adding “separator records” to the data source before binding it to the GridView. 您可以通过将“分隔符记录”添加到数据源,然后再将其绑定到GridView来注入所需的分隔符行。

Here is an example I came across: 这是我遇到的一个示例:

protected override void Render(HtmlTextWriter writer)
{
    string lastSubCategory = String.Empty;
    Table gridTable = (Table)gvProducts.Controls[0];
    foreach (GridViewRow gvr in gvProducts.Rows)
    {
        HiddenField hfSubCategory = gvr.FindControl("hfSubCategory") as
                                    HiddenField;
        string currSubCategory = hfSubCategory.Value;
        if (lastSubCategory.CompareTo(currSubCategory) != 0)
        {
            int rowIndex = gridTable.Rows.GetRowIndex(gvr);
            // Add new group header row
            GridViewRow headerRow = new GridViewRow(rowIndex, rowIndex,
                DataControlRowType.DataRow, DataControlRowState.Normal);
            TableCell headerCell = new TableCell();
            headerCell.ColumnSpan = gvProducts.Columns.Count;
            headerCell.Text = string.Format("{0}:{1}", "SubCategory",
                                            currSubCategory);
            headerCell.CssClass = "GroupHeaderRowStyle";
            // Add header Cell to header Row, and header Row to gridTable
            headerRow.Cells.Add(headerCell);
            gridTable.Controls.AddAt(rowIndex, headerRow);
            // Update lastValue
            lastSubCategory = currSubCategory;
        }
    }
    base.Render(writer);
}

FULL ARTICLE 全文

<asp:Literal ID="litDataLoader" runat="server">

        </asp:Literal>
        <asp:GridView ID="gvTemp" runat="server" AutoGenerateColumns="false" BorderWidth="0" ShowHeader="false" ShowFooter="false">
            <Columns>
                <asp:TemplateField ControlStyle-Width="200px">
                    <ItemTemplate>
                        <asp:Label ID="lblTestItemName" runat="server" Text='<%#Eval("TestItemName") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ControlStyle-Width="220px">
                    <ItemTemplate>
                        <asp:Label ID="lblTestItemValues" runat="server" Text='<%#Eval("Itm") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ControlStyle-Width="200px">
                    <ItemTemplate>
                        <asp:Label ID="lblDefaultValues" runat="server" Text='<%#Eval("DefaultValues") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

Binding Grid view in .cs: .cs中的绑定网格视图:

public override void VerifyRenderingInServerForm(Control control)
    {
        /* Verifies that the control is rendered */
    }
    private void bindData()
    {

        string Query = "select TestItemID,TestItemName,TestItemValues,DefaultValues,TestID,ItemGroup,isnull(TestItemGroup,'-') as TestItemGroup, (ItemGroup + ' ' + TestItemValues) as Itm from Test_Items where TestID = '" + ViewState["id"].ToString() + "'";
        SqlDataAdapter da = new SqlDataAdapter(Query, con);
        DataTable dt = new DataTable();
        da.Fill(dt);
        var rows = dt.AsEnumerable().Select(s => new { id = s.Field<string>("TestItemGroup"), }).Distinct().ToList();
        int count = rows.Count;
        if (dt.Rows.Count > 0)
        {
            StringBuilder build = new StringBuilder();
            foreach (var row in rows)
            {
                string Name = row.id != "-" ? row.id : " ";
                build.Append("<b>" + Name + "</b>");
                DataTable dts = new DataTable();
                dts = dt.Select("TestItemGroup = '" + row.id + "'").CopyToDataTable();
                gvTemp.Visible = true;

                gvTemp.DataSource = dts;
                gvTemp.DataBind();
                StringWriter sw = new StringWriter();
                HtmlTextWriter hw = new HtmlTextWriter(sw);
                gvTemp.RenderControl(hw);
                string gridHTML = sw.ToString().Replace("\"", "'").Replace(System.Environment.NewLine, "");
                build.Append(gridHTML);
                gvTemp.Visible = false;
            }
            litDataLoader.Text = build.ToString();
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM