Попытка добавить символ валюты к значению с помощью system.globalization - PullRequest
1 голос
/ 26 июля 2011

Я пытаюсь добавить символ валюты к итоговому значению, используя следующий код

using System.Globalization;

double value;
double totalValue = 0.0;            

foreach (DataRow row in reportData.Rows)
{
    if (double.TryParse(row["value"].ToString(), out value))
    {
        totalValue += value;
        RegionInfo rgi = new RegionInfo("en-UK");
        totalValue += Convert.ToString(string.Format("   CurrencySymbol:               {0}\n", rgi.CurrencySymbol));             
     }
 }

выдает ошибку не может преобразовать тип string в double Может ли кто-нибудь помочь мне

Модифицированный код:

       int count;
      int total = 0;
      double value;

      double totalValue = 0.0;




      foreach (DataRow row in reportData.Rows)
      {
        if (double.TryParse(row["value"].ToString(), out value))
        {
          totalValue += value;


        }

        if (!Overview && int.TryParse(row["mshipssold"].ToString(), out count))
        {
          total += count;
        }
      }
      DataRow totalRow = reportData.NewRow();
      totalRow["mshipType_Name"] = "Total";
      totalRow["mshipssold"] = total;
      totalRow["value"] = totalValue;

      reportData.Rows.Add(totalRow);

      targetChartControl.Series["Value"].Points.DataBindXY(reportData.Rows, "mshipType_Name", reportData.Rows, "value");

      if (!Overview)
      {
        targetChartControl.Series["Quantity"].Points.DataBindXY(reportData.Rows, "mshipType_Name", reportData.Rows, "mshipssold");
      }
    }

Модифицированный код: 1

график enter image description here

Я хочу показать, как это £ 3830, £ 2070, £ 5090 на синих полосах

и это мой код

   try
    {
    DataTable reportData = KPIData.MembershipSales(StartDate, EndDate, mf);
    Series quantitySeries;
    Series valueSeries = null;
    Title title;
    string area;

    targetChartControl.ChartAreas.Clear();
    targetChartControl.Series.Clear();
    targetChartControl.Titles.Clear();

    area = "Value";
    targetChartControl.ChartAreas.Add(area);
    quantitySeries = targetChartControl.Series.Add(area);
    quantitySeries.ChartArea = area;

    if (!Overview)
    {
      title = targetChartControl.Titles.Add("Membership Sales by Total Contract Value by Type");
      title.Font = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Bold);
      title.Alignment = ContentAlignment.TopLeft;
      title.DockedToChartArea = area;

      targetChartControl.Titles.Add("").DockedToChartArea = area;
    }

    targetChartControl.Titles.Add("Membership sale values").DockedToChartArea = area;


    if (!Overview)
    {
      area = "Quantity";
      targetChartControl.ChartAreas.Add(area);
      quantitySeries = targetChartControl.Series.Add(area);
      quantitySeries.ChartArea = area;

      title = targetChartControl.Titles.Add("Membership Sales by Quantity");
      title.Font = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Bold);
      title.Alignment = ContentAlignment.TopLeft;
      title.DockedToChartArea = area;

      targetChartControl.Titles.Add("").DockedToChartArea = area;
      targetChartControl.Titles.Add("Membership sale quantities").DockedToChartArea = area;
    }

    foreach (Title chartTitle in targetChartControl.Titles)
    {
      chartTitle.IsDockedInsideChartArea = false;
    }

    foreach (ChartArea chartArea in targetChartControl.ChartAreas)
    {
      chartArea.Area3DStyle.Enable3D = true;
      chartArea.AxisX.LabelStyle.IsEndLabelVisible = true;
    }

    foreach (Series series in targetChartControl.Series)
    {
      series.ChartType = SeriesChartType.StackedColumn;
      series["ColumnDrawingStyle"] = "SoftEdge";
      series["LabelStyle"] = "Top";

      series.IsValueShownAsLabel = true;
      //          series.CustomProperties = "DrawingStyle=Cylinder";
      series.BackGradientStyle = GradientStyle.DiagonalLeft;
    }

    foreach (Legend legend in targetChartControl.Legends)
    {
      legend.Enabled = false;
    }

    if (reportData == null)
    {
      valueSeries.Points.Clear();
      valueSeries.Points.AddXY("No sales for this time period", 0);

      if (!Overview)
      {
        quantitySeries.Points.Clear();
        quantitySeries.Points.AddXY("No sales for this time period", 0);
      }
    }
    else
    {
      int count;
      int total = 0;
      double value;

      double totalValue = 0.0;




      foreach (DataRow row in reportData.Rows)
      {
        if (double.TryParse(row["value"].ToString(), out value))
        {
          totalValue += value;    

        }

        if (!Overview && int.TryParse(row["mshipssold"].ToString(), out count))
        {
          total += count;
        }
      }

      CultureInfo rgi = new CultureInfo("en-GB");
      string totalcurrency = string.Format(rgi, "{0:C}", totalValue);

      DataRow totalRow = reportData.NewRow();
      totalRow["mshipType_Name"] = "Total";
      totalRow["mshipssold"] = total;
      totalRow["value"] = totalcurrency;

      reportData.Rows.Add(totalRow);

      targetChartControl.Series["Value"].Points.DataBindXY(reportData.Rows, "mshipType_Name", reportData.Rows, "value");

      if (!Overview)
      {
        targetChartControl.Series["Quantity"].Points.DataBindXY(reportData.Rows, "mshipType_Name", reportData.Rows, "mshipssold");
      }
    }
  }
  catch
  {
  }

Ответы [ 3 ]

4 голосов
/ 26 июля 2011

Вам необходимо выполнить суммирование, а затем преобразовать его в строку.

double totalValue;
foreach (DataRow row in reportData.Rows) {
  double value;
  if (double.TryParse(row["value"].ToString(),out value) totalValue+= value;
}
CultureInfo rgi = new CultureInfo("en-GB");
string totalValueCurrency=string.Format(rgi,"{0:c}", totalValue);

В ответ на ваш измененный вопрос:

перед тем, как DataRow totalRow = reportData.NewRow(); вставить две строки

CultureInfo rgi = new CultureInfo("en-GB");
string totalValueCurrency=string.Format(rgi,"{0:c}", totalValue);

и затем измените

totalRow["value"] = totalValue;

на чтение

totalRow["value"] = totalValueCurrency;

Однако это может быть ужасно неправильно, если тип данных вашего столбца не является строкой.Возможно, вам лучше изменить свой отчет, чтобы выполнить форматирование для вас.

Если вы используете Microsoft Chart Control, вам может потребоваться это вместо этого:

Изменить этот раздел кода

foreach (ChartArea chartArea in targetChartControl.ChartAreas)    {
  chartArea.Area3DStyle.Enable3D = true;
  chartArea.AxisX.LabelStyle.IsEndLabelVisible = true;
  // New Line Here
  chartArea.AxisY.LabelStyle.Format = "C";
}
0 голосов
/ 26 июля 2011

Эта строка немного запутана:

          totalValue += Convert.ToString(string.Format("   CurrencySymbol:               {0}\n", rgi.CurrencySymbol));

totalValue - это двойное число, и вы пытаетесь добавить к нему строку.

0 голосов
/ 26 июля 2011

Вы не можете хранить строку в двойнике - это никогда не сработает, когда totalValue равно double.

totalValue + = Convert.ToString (string.Format ("CurrencySymbol: {0} \ n", rgi.CurrencySymbol));

...