报告组金额问题

时间:2009-07-18 06:50:03

标签: rdlc

重复:这与Group amount in word完全相同。他有一个新用户和同一个名字。请关闭重复。

我在C#VS05 Window上工作。我的问题是,我无法用单词显示组数...更多说明:

 WorkerID  Designation          Name      CurrentSalary     DueSalary

    1              AC           A           100             0        
    2              AC           B           180            20
    3              EG           C           100            80
    4              EG           D           120             0
    5              MD           E           1000            0
    6              AC           F           1200           70
    7              EG           G           100            90

AC小组

       WorkerID  Designation      Name      CurrentSalary      DueSalary

        1              AC           A           100             0        
        2              AC           B           180            20        
        6              AC           F           1200           70
   -------------------------------------------------------------------
                                                 1480          90
    Current Amount : One thousand Four hundred eighty  Due Amount : Ninety

在我的rdlc报告中,我显示了指定组的报告.....在我的组页脚中输出currentSalary的总和...我这样做但我需要显示CurrentSalary和DueSalary Amount in字也......但是怎么样?

1 个答案:

答案 0 :(得分:0)

嗨我得到了一个解决方案,无论你想翻译什么数量都作为参数传递 货币eg.INR和子单位。

private String changeToWords(String numb, String currencyName, String SubUnit)
{
    String val = "", wholeNo = numb, points = "", andStr = "", pointStr = "", Ruppesstr = "";
    String endStr = "Only";
    try
    {
        int decimalPlace = numb.IndexOf(".");
        if (decimalPlace > 0)
        {
            wholeNo = numb.Substring(0, decimalPlace);
            points = numb.Substring(decimalPlace + 1);
            if (Convert.ToInt32(points) > 0)
            {
                andStr = "and";// just to separate whole numbers from points/cents 
                Ruppesstr = currencyName;
                endStr = SubUnit + endStr;
                pointStr = translateCents(points);
                if (pointStr == "")
                    andStr = "";
            }

        }
        val = String.Format("{0} {1}{2} {3}{4}", translateWholeNumber(wholeNo).Trim(), Ruppesstr, andStr, pointStr, endStr);
    }
    catch { ;}
    return val;
}
private String translateWholeNumber(String number)
{
    string word = "";
    try
    {
        bool beginsZero = false;//tests for 0XX 
        bool isDone = false;//test if already translated 
        double dblAmt = (Convert.ToDouble(number));
        //if ((dblAmt > 0) && number.StartsWith("0")) 
        if (dblAmt > 0)
        {   //test for zero or digit zero in a nuemric 
            beginsZero = number.StartsWith("0");
            int numDigits = number.Length;
            int pos = 0;//store digit grouping 
            String place = "";//digit grouping name:hundres,thousand,etc... 
            switch (numDigits)
            {
                case 1://ones' range 
                    word = ones(number);
                    isDone = true;
                    break;
                case 2://tens' range 
                    word = tens(number);
                    isDone = true;
                    break;
                case 3://hundreds' range 
                    pos = (numDigits % 3) + 1;
                    place = " Hundred ";
                    break;
                case 4://thousands' range 
                case 5:
                case 6:
                    pos = (numDigits % 4) + 1;
                    place = " Thousand ";
                    break;
                case 7://millions' range 
                case 8:
                case 9:
                    pos = (numDigits % 7) + 1;
                    place = " Million ";
                    break;
                case 10://Billions's range 
                    pos = (numDigits % 10) + 1;
                    place = " Billion ";
                    break;
                //add extra case options for anything above Billion... 
                default:
                    isDone = true;
                    break;
            }
            if (!isDone)
            {   //if transalation is not done, continue...(Recursion comes in now!!) 
                word = translateWholeNumber(number.Substring(0, pos)) + place + translateWholeNumber(number.Substring(pos));
                //check for trailing zeros 
                if (beginsZero)
                    word = " and " + word.Trim();
            }
            //ignore digit grouping names 
            if (word.Trim().Equals(place.Trim())) word = "";
        }
    }
    catch { ;}
    return word.Trim();
}
private String tens(String digit)
{
    int digt = Convert.ToInt32(digit);
    String name = null;
    switch (digt)
    {
        case 10:
            name = "Ten";
            break;
        case 11:
            name = "Eleven";
            break;
        case 12:
            name = "Twelve";
            break;
        case 13:
            name = "Thirteen";
            break;
        case 14:
            name = "Fourteen";
            break;
        case 15:
            name = "Fifteen";
            break;
        case 16:
            name = "Sixteen";
            break;
        case 17:
            name = "Seventeen";
            break;
        case 18:
            name = "Eighteen";
            break;
        case 19:
            name = "Nineteen";
            break;
        case 20:
            name = "Twenty";
            break;
        case 30:
            name = "Thirty";
            break;
        case 40:
            name = "Fourty";
            break;
        case 50:
            name = "Fifty";
            break;
        case 60:
            name = "Sixty";
            break;
        case 70:
            name = "Seventy";
            break;
        case 80:
            name = "Eighty";
            break;
        case 90:
            name = "Ninety";
            break;
        default:
            if (digt > 0)
            {
                name = tens(digit.Substring(0, 1) + "0") + " " + ones(digit.Substring(1));
            }
            break;
    }
    return name;
}
private String ones(String digit)
{
    int digt = Convert.ToInt32(digit);
    String name = "";
    switch (digt)
    {
        case 1:
            name = "One";
            break;
        case 2:
            name = "Two";
            break;
        case 3:
            name = "Three";
            break;
        case 4:
            name = "Four";
            break;
        case 5:
            name = "Five";
            break;
        case 6:
            name = "Six";
            break;
        case 7:
            name = "Seven";
            break;
        case 8:
            name = "Eight";
            break;
        case 9:
            name = "Nine";
            break;
    }
    return name;
}
private String translateCents(String cents)
{
    String cts = "";
    Decimal centsD = Convert.ToDecimal(cents);
    if (centsD > 50)
        cts = tens(centsD.ToString());
    return cts;
} 

调用此方法例如:

String ValueInWords=changeToWords("100", "INR","")

将此值作为参数传递给报告。它可以正常工作。