2017-02-02 3 views
0

Est-ce que quelqu'un peut aider à formater dynamiquement le type de données de l'argent pour deux colonnes?Mettre en forme la valeur du tableau de données de l'argent dans C#

using System; 
using System.Data; 
using Microsoft.SqlServer.Dts.Runtime; 
using System.Windows.Forms; 
using System.Data.OleDb; 
using System.IO; 
using System.Reflection; 

namespace ST_367d705c54de4e9e9f890350f933c80b.csproj 

{ 
    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] 
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase 
    { 
    #region VSTA generated code 
    enum ScriptResults 
    { 
     Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success, 
     Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure 
    }; 
    #endregion 


    public void Main() 
    { 
     string basePath = Dts.Variables["User::VarDirectoryPath"].Value.ToString(); 

     try 
     { 
      OleDbDataAdapter A = new OleDbDataAdapter(); 
      System.Data.DataTable dt = new System.Data.DataTable(); 

      var delimiter = Dts.Variables["User::VarDelimiter"].Value.ToString(); 
      A.Fill(dt, Dts.Variables["User::VarObject"].Value); 

      basePath = Dts.Variables["User::VarDirectoryPath"].Value.ToString(); 
      string filePath = Path.Combine(basePath, (Dts.Variables["User::VarFileName_1"].Value.ToString() 
       + Dts.Variables["User::VarDate"].Value.ToString() + Dts.Variables["User::VarFileExtension_1"].Value.ToString())); 

      int i = 0; 
      StreamWriter sw = null; 

      using (sw = new StreamWriter(filePath, false)) 
      { 
       for (i = 0; i < dt.Columns.Count; i++) 
       { 
        sw.Write(dt.Columns[i].ToString() + Dts.Variables["User::VarDelimiter"].Value.ToString()); 
       } 

       sw.WriteLine(); 

       foreach (DataRow row in dt.Rows) 
       { 
        object[] array = row.ItemArray; 
        for (i = 0; i < array.Length; i++) 
        { 
         object val = array[i]; 
         if (val == "0") 
          sw.Write(string.Format("#.##", val) + delimiter); 
         else 
          sw.Write(val + delimiter); 
        } 

        sw.WriteLine(); 
       } 

       sw.Close(); 
      } 
     } 
     catch (Exception ex) 
     { 
      string file = string.Format("err_{0}.txt", Dts.Variables["User::VarDate"].Value.ToString()); 
      File.WriteAllText(Path.Combine(basePath, file), ex.ToString()); 
     } 

     Dts.TaskResult = (int)ScriptResults.Success; 
    } 
} 
} 

Des suggestions? Il y a 10 colonnes dans la table de données et la colonne 3,4,5 doit être formatée avec deux décimales et doit également entrer 0,00 si la valeur est égale à zéro ou nulle.

+0

Quel est le type de données de ces colonnes? Vous devriez le convertir en floats ou en doubles en utilisant float.tryparse – dadde

+0

Le type de données des colonnes est décimal (18,2) par défaut 0 dans Excel. J'ai besoin de la valeur de 0.00 pour la valeur nulle ou "0". Aussi besoin si la valeur entière numéro 529 alors il devrait afficher comme 529.00 – user3120927

+0

Non, je veux dire quel est le type de données de votre objet val = tableau [i]; pour ces colonnes? Déboguer et vérifier. Vous supposez qu'ils sont analysés comme des chaînes et si c'est le cas, vous devez les analyser en double ou en flottant avant de faire votre mise en forme. Vérifiez également string.isNullOrEmpty() pour gérer les valeurs nulles. – dadde

Répondre

0

Voici un exemple sur la mise en forme décimaux:

https://dotnetfiddle.net/da7UoR

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     decimal val1 = 0m; 
     decimal val2 = 125580m; 


     Console.WriteLine(val1.ToString("0.00")); 
     //Output 0.00 

     Console.WriteLine(val2.ToString("0.00")); 
     //Output 125580.00 

     //Money format 
     Console.WriteLine(val1.ToString("C"));  
     //Output $0.00 

     Console.WriteLine(decimalToFormattedString(val1)); 
     //Output 0.00 

     Console.WriteLine(decimalToFormattedString(val2)); 
     //Output 125580.00 
    } 

    public static string decimalToFormattedString(decimal myValue) 
    { 
     return myValue.ToString("0.00"); 
    } 
}