如何编辑Gridview的标题。 (创建自定义标题) [英] How to Edit the Headers of the Gridview. (Creating Custom Headers)

查看:72
本文介绍了如何编辑Gridview的标题。 (创建自定义标题)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个gridview,其中有6列,即:PRODUCTS,RETAIL OUTLET,DATE,TIME,QUANTITY& AMOUNT和我的数据库表中的列名相同。

主要的问题是当在gridview中填充数据时一切正常并且完美,我只需要执行产品列已经' CNG'因此,数量列名称应该是'数量 - Kg(s)'和如果产品列具有'PETROL,DIESEL或HI-OCTANE',那么它应该将列数量的标题显示为'QUANTITY - Ltr'



请帮忙解决这个问题。



我正在创建一个自定义标题和小元素和小计row_created和row_databound事件。

我知道其中一个事件必须有一个解决方案,因为这是我的代码如下:





I have a gridview in which has 6 columns i.e: PRODUCTS, RETAIL OUTLET, DATE, TIME, QUANTITY & AMOUNT and same as the column names in my database table.
The main is issue is when data is populated in the gridview everything works fine and perfect, I ONLY NEED TO IMPLEMENT THAT IF THE PRODUCT COLUMN HAS 'CNG' IN IT THEN THE QUANTITY COLUMN NAME SHOULD BE 'QUANTITY - Kg(s)' AND ELSE IF THE PRODUCT COLUMN HAS 'PETROL,DIESEL or HI-OCTANE' THEN IT SHOULD DISPLAY THE HEADER OF COLUMN QUANTITY TO 'QUANTITY - Ltr'

Please help in this issue.

I am creating a custom header and grandtotals and subtotals in the row_created and row_databound events.
And I know there must be a solution in one of those events as here is my code in the following:


using System;


public partial class view_rep : System.Web.UI.Page
{
    string strPreviousRowID = string.Empty;
    string productype = string.Empty;
    int intSubTotalIndex = 1;
    double dblSubTotalTotalBilled = 0;
    double dblGrandTotalTotalBilled = 0;
    string[] arr;
    int myr;
    protected void Page_Load(object sender, EventArgs e)
    {
       
    }


//HERE IS THE MAIN SCIENCE..

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Label lblamount = (Label)e.Row.FindControl("lbl_Amount");

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            strPreviousRowID = DataBinder.Eval(e.Row.DataItem, "product").ToString();
            productype = DataBinder.Eval(e.Row.DataItem, "product").ToString();
            double dblTotalBilled = Convert.ToDouble(DataBinder.Eval(e.Row.DataItem, "amount").ToString());
            dblSubTotalTotalBilled += dblTotalBilled;
            dblGrandTotalTotalBilled += dblTotalBilled;
        }
        if (e.Row.RowIndex >= 0)
        {
            double dblTotalBilled = Convert.ToDouble(DataBinder.Eval(e.Row.DataItem, "amount").ToString());
            lblamount.Text = string.Format("{0:#,#0.00}", dblTotalBilled);
        }
    }

    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {
        bool IsTotalRowNeedToAdd = false;
        bool IsGrandTotalRowNeedtoAdd = false;
        if ((strPreviousRowID != string.Empty) && (DataBinder.Eval(e.Row.DataItem, "product") != null))
            if (strPreviousRowID != DataBinder.Eval(e.Row.DataItem, "product").ToString())
                IsTotalRowNeedToAdd = true;

        if ((strPreviousRowID != string.Empty) && (DataBinder.Eval(e.Row.DataItem, "product") == null))
        {
            IsTotalRowNeedToAdd = true;
            IsGrandTotalRowNeedtoAdd = true;
            intSubTotalIndex = 0;
        }
        if ((strPreviousRowID == string.Empty) && (DataBinder.Eval(e.Row.DataItem, "product") != null))
        {
            GridView grdViewProducts = (GridView)sender;

            GridViewRow SubTotalRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert);

            TableCell HeaderCell = new TableCell();
            HeaderCell.Text = "<div>" + " Fuel Type: " + DataBinder.Eval(e.Row.DataItem, "product").ToString() + "</br>" +
                            " Card No: " + DataBinder.Eval(e.Row.DataItem, "card_no").ToString() +
                        "</div>";
            HeaderCell.ColumnSpan = 5;
            HeaderCell.CssClass = "GroupHeaderStyle";
            SubTotalRow.Cells.Add(HeaderCell);

            grdViewProducts.Controls[0].Controls.AddAt(e.Row.RowIndex + intSubTotalIndex, SubTotalRow);
            intSubTotalIndex++;


        }
        if (IsTotalRowNeedToAdd)
        {
            GridView grdViewProducts = (GridView)sender;

            // Creating a Row 
            GridViewRow SubTotalRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert);

            //Adding Total Cell  
            TableCell HeaderCell = new TableCell();
            HeaderCell.Text = "Sub Total";
            HeaderCell.ColumnSpan = 4; // For merging first, second row cells to one 
            HeaderCell.CssClass = "SubTotalRowStyle";
            SubTotalRow.Cells.Add(HeaderCell);

            HeaderCell = new TableCell();
            HeaderCell.Text = string.Format("{0:#,##0.00}", dblSubTotalTotalBilled);
            HeaderCell.CssClass = "SubTotalRowStyle";
            SubTotalRow.Cells.Add(HeaderCell);

            grdViewProducts.Controls[0].Controls.AddAt(e.Row.RowIndex + intSubTotalIndex, SubTotalRow);

            intSubTotalIndex++;

            // Repeating Header Row before every product detail.
            GridViewRow row = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);

            HeaderCell = new TableCell();
            HeaderCell.Controls.Add(new Label { Text = "Retail Outlet" });
            HeaderCell.CssClass = "headergv";
            HeaderCell.Height = Unit.Parse("16px");
            row.Cells.Add(HeaderCell);
            HeaderCell = new TableCell();
            HeaderCell.Controls.Add(new Label { Text = "Date" });
            HeaderCell.CssClass = "headergv";
            HeaderCell.Height = Unit.Parse("16px");
            row.Cells.Add(HeaderCell);
            HeaderCell = new TableCell();
            HeaderCell.Controls.Add(new Label { Text = "Time" });
            HeaderCell.CssClass = "headergv";
            HeaderCell.Height = Unit.Parse("16px");
            row.Cells.Add(HeaderCell);
            HeaderCell = new TableCell();
            // HERE IS THE CONDITION APPLIED AND IT WORKS FINE.. BUT WHEN THE PRODUCT HAS
            // ONLY PETROL THEN IT IS SHOWING THE QUANTITY - Kg(s)....WANT TO MAKE IT DYNAMIC.
            if (strPreviousRowID == "PETROL" || strPreviousRowID != "CNG")
            {
                HeaderCell.Controls.Add(new Label { Text = "Quantity - Kg(s)" });
            }
            else
            {
                HeaderCell.Controls.Add(new Label { Text = "Quantity - Ltr(s)" });
            }
            // ***********************************
            HeaderCell.CssClass = "headergv";
            HeaderCell.Height = Unit.Parse("16px");
            row.Cells.Add(HeaderCell);
            HeaderCell = new TableCell();
            HeaderCell.Controls.Add(new Label { Text = "Amount" });
            HeaderCell.CssClass = "headergv";
            HeaderCell.Height = Unit.Parse("16px");
            row.Cells.Add(HeaderCell);
            grdViewProducts.Controls[0].Controls.AddAt(e.Row.RowIndex + intSubTotalIndex, row);
            intSubTotalIndex++;

            // *************************

            if (DataBinder.Eval(e.Row.DataItem, "product") != null)
            {
                GridViewRow SubTotalRow1 = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert);

                TableCell HeaderCell1 = new TableCell();
                HeaderCell1.Text = "<div>" + " Fuel Type: " + DataBinder.Eval(e.Row.DataItem, "product").ToString() + "</br>" +
                                " Card No: " + DataBinder.Eval(e.Row.DataItem, "card_no").ToString() +
                            "</div>";
                HeaderCell1.ColumnSpan = 5;
                HeaderCell1.CssClass = "GroupHeaderStyle";
                SubTotalRow1.Cells.Add(HeaderCell1);

                grdViewProducts.Controls[0].Controls.AddAt(e.Row.RowIndex + intSubTotalIndex, SubTotalRow1);
                intSubTotalIndex++;
            }

            dblSubTotalTotalBilled = 0;
        }

        if (IsGrandTotalRowNeedtoAdd)
        {
            GridView grdViewProducts = (GridView)sender;

            GridViewRow GrandTotalRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert);

            TableCell HeaderCell = new TableCell();
            HeaderCell.Text = "Grand Total";
            HeaderCell.HorizontalAlign = HorizontalAlign.Left;
            HeaderCell.ColumnSpan = 4; // For merging first, second row cells to one 
            HeaderCell.CssClass = "GrandTotalRowStyle";
            GrandTotalRow.Cells.Add(HeaderCell);

            HeaderCell = new TableCell();
            HeaderCell.Text = string.Format("{0:#,##0.00}", dblGrandTotalTotalBilled);
            HeaderCell.CssClass = "GrandTotalRowStyle";
            GrandTotalRow.Cells.Add(HeaderCell);

            grdViewProducts.Controls[0].Controls.AddAt(e.Row.RowIndex, GrandTotalRow);
        }
    }
}

推荐答案

尝试切换循环



try switch loop

switch (QtyType)
    {
        case "CNG":
         //code for header Text
            break;
        case "Petrol":
        //code for header Text
            break;
        Default :
    //code for header Text
            break;
    }


您可以将字符串比较替换为contains并使用switch-case结构。



You can replace the string comparison with a "contains" and use a switch-case construct .

var QtyType = //datarow value of your product column consists of the type;
if (string.Contains(QtyType,StringComparison.OrdinalIgnoreCase))
{
    switch (QtyType)
    {
        case "CNG":
	//Assign header Text	
            break;
        case "Petrol":
        //Assign header Text
            break;
        Default :
	//Assign header Text
            break;
    }
}





如果有更多类型,您可以考虑将其重构为单独的方法。

希望这会有所帮助。



You can think of refactoring this to a seperate method in case there are more types.
Hope this helps.


这篇关于如何编辑Gridview的标题。 (创建自定义标题)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆