0

XML ファイルを GRIDVIEW に読み込んでいますが、なんとかできました。しかし、私は現在、1 つの特定の値 (47.138) を読み込もうとしたときに、1 つのことで立ち往生しています。この値は、次の形式 (分:秒.マイル秒) で読み込まれることになっています。この場合は "0:47.138" になります。

私の質問は、このタイプのデータをロードして正しい形式で表示するにはどうすればよいですか?

XmlNodeList drivers = doc.GetElementsByTagName("Driver");

        foreach (XmlNode driver in drivers)
        {
            dInfo = new BusObjects.DriverInfo();

if (driver.ChildNodes[i].Name.Equals("BestLapTime"))
                    dInfo.FastestLap = Convert.ToDouble(driver.ChildNodes[i].InnerText).ToString("????");                     
            }

これは私のDriverInfo.csです

    private double _fastestlap;

    public double FastestLap
    {
        get { return _fastestlap; }
        set { _fastestlap = value; }
    }
4

2 に答える 2

0

TimeSpanオブジェクトを作成し、それを使用してテキストをフォーマットできます。

TimeSpan ts = TimeSpan.FromSeconds(47.138);
Console.WriteLine(ts.ToString(@"mm\:ss\.fff"));

あなたのDriverInfoクラスでは、これを行うためのメソッドを持つことができます。

public string GetFormattedTime()
{
   TimeSpan ts = TimeSpan.FromSeconds(_fastestlap);
   return ts.ToString(@"mm\:ss\.fff");

   //shorter version if you prefer
   //return TimeSpan.FromSeconds(_fastestlap).ToString(@"mm\:ss\.fff");
}

MSDNには、カスタム TimeSpan 形式に関する詳細情報があります。

于 2012-12-08T15:37:40.727 に答える
0

キーボードPの答えを拡張する....

foreach (XmlNode driver in drivers)
{
  dInfo = new BusObjects.DriverInfo();

  if (driver.ChildNodes[i].Name.Equals("BestLapTime"))
  {
    dInfo.FastestLap = Convert.ToDouble(driver.ChildNodes[i].InnerText);
  }
}

// you can use an auto property for FastestLap
public double FastestLap {get; set;}

// Add another property for FormattedFastestLap:
public string FormattedFastestLap 
{
    get { return TimeSpan.FromSeconds(FastestLap).ToString(@"mm\:ss\.fff"); }
}

ループではforeach、倍精度である FastestLap の値を設定しています。FormattedFastestLap という別のプロパティを作成することにより、FastestLap プロパティにアクセスし、最初に TimeSpan オブジェクトに変換してから TimeSpan を書式設定された文字列で返すことにより、double を文字列に変換できます。

グリッドで、表示を FastestLap プロパティの代わりに FormattedFastestLap にバインドします。

于 2012-12-08T18:15:59.677 に答える