2009-07-18 4 views
0

重複:これはGroup amount in wordの正確な複製です。彼は新しいユーザーと同じ名前を持っています。重複して閉じてください。レポートグループ額の問題

私はC#VS05ウィンドウで作業します。 AC私RDLCレポートで

 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 

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 

グループIは、のグループに関するレポートを示しています。私の問題は、私は言葉に基量を表示することはできません...もっと明確にするため、あります指定 .....私のグループフッタでcurrentSalaryの合計を入れて...私はそれを行いますが、私はCurrentSalaryとDueSalary Amountを言葉で表示する必要があります......しかしどのように?

+0

これは同じ質問ですか? http://stackoverflow.com/questions/1136312/group-amount-in-word – derobert

+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; 
} 

このメソッドを呼び出し例:report.Itへのパラメータが動作するよう

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

がこの値を渡します。