■87387 / inTopicNo.3) |
Re[1]: キャストのエラー |
□投稿者/ 魔界の仮面弁士 (1671回)-(2018/05/16(Wed) 17:42:37)
|
2018/05/17(Thu) 10:29:11 編集(投稿者)
■No87385 (Ponta さん) に返信 > for (int i = 0; i < ds.Tables["TableA"].Rows.Count; i++) ここは TableB で無いようですが、あえてそうしているのでしょうか。
TableA と TableB の関係次第ではあるのですが、ループ内では TableA を見ておらず、むしろ TableB の行差分を取っているように見えたので、 i < ds.Tables["TableB"].Rows.Count - 1 といった継続条件になるのではないか、と思ってみたり。
> 現状はobject型(中は整数値)からint型にキャストしています。 その整数値は int ですか。それとも long とか short だったりしますか? string 値ということは無いですよね?
念のため、ds.Tables["TableB"].Columns[0].DataType を確認しておいた方が良いかと。
> キャストの仕方が間違っているのか、そもそもキャストだとできないのかわかりません。 ボックス化解除するためには、object 内のデータの型を正しく把握している必要があります。
int intValue = 10; long longValue = 10L; short shortValue = 10; string stringValue = "10";
object oInt = intValue; object oLong = longValue; object oShort = shortValue; object oString = stringValue;
Console.WriteLine((int)oInt); // OK // Console.WriteLine((int)oLong); // InvalidCastException // Console.WriteLine((int)oShort); // InvalidCastException // Console.WriteLine((int)oString); // InvalidCastException Console.WriteLine((int)(long)oLong); // OK Console.WriteLine((int)(short)oShort); // OK Console.WriteLine(int.Parse((string)oString)); // OK
> var data2 = new DataPoint(); > data2.SetValueXY(ds.Tables["TableB"].Columns[0], (int)ds.Tables["TableB"].Rows[i+1][0]-(int)ds.Tables["TableB"].Rows[i][0]); ←ここでエラー
DataPoint クラスの public void SetValueXY(object xValue, params object[] yValue) というメソッドを呼び出しているようですが、ここで 第一引数 xValue に対して、System.Data.DataColumn を渡していますよね。
SetValueXY の第一引数には、データポイントの X 値を渡すべきなのでは? https://referencesource.microsoft.com/#System.Windows.Forms.DataVisualization/Common/DataManager/DataPoint.cs,2086 https://referencesource.microsoft.com/#System.Windows.Forms.DataVisualization/Common/DataManager/DataSeries.cs,a83419cfea834cf1,references
上記の実装を見る限りでは、第一引数のデータ型は、 数値や文字列が求められているように見受けられます。
…と思ったんですが、こっちは私の勘違いでした。 var data2 = new DataPoint(); data2.SetValueXY(xValue, yValue); の場合は、xValue が DataColumn でもいけますね。
もしもこれが、 chart1.Series[a].Points[b].SetValueXY(xValue, yValue); の場合は、xValue が DataColumn だとエラーになりますが。
|
|