2016-11-01 13 views
0

グリッドコントロールがあり、選択した行の値を取得する必要があります。行内にvarchar型のセルの値を取得できましたが、10進型のセルの値を取得する際に問題があります。 product_price列が(10,2)の長さとdecimal型になるように設定ので、そのは表示値が13,233.00Devexpress Gridview 10進形式のセルで行の値を取得する方法は?

ようです

private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e) 
    { 

     var productPrice = Convert.ToDecimal(gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "product_price").ToString()); 

     MessageBox.Show(productPrice.ToString()); 
    } 

詳細情報については:

は、ここですべての行をクリックするために私のコードです

この問題を解決するために私を助けてくれてありがとう

+0

何が問題ですか?それは例外などを投げますか? – Hermanto

+0

うーん、私は忘れてしまった。はい、 "オブジェクト参照がオブジェクトのインスタンスに設定されていません"という例外がスローされます。 私を助けてください –

+0

あなたのコードは私のマシンで動作しましたが、グループ化されていない標準ビューでのみ動作しました。このグリッドビューにグループ化を適用していますか? – Hermanto

答えて

0

私の最初の考え:フォーカスされた行はありませんか?これを追加して問題が解決するかどうか確認してください:

if (gridView1.SelectedRowsCount == 0) 
    return; 

これは問題ではありませんでしたか?さて、あなたのコードにこれを追加して、ブレークポイントを設定:

object o = gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "product_price"); 
Type t = o.GetType(); 

あなたは時計(またはホバリング)を追加するとt上で、それはSystem.Decimalのか、文字列と言っていますか?

それは小数だ場合、あなたは良い形にする必要がありますし、私はことをお勧めすることは、単に以下にコードを変更することです:

var productPrice = Convert.ToDecimal(gridView1.GetRowCellValue(
    gridView1.FocusedRowHandle, "product_price")); 

私は省略唯一の事はToString()だったので、私たちはできますConvert関数を(未処理の)オブジェクトに適用させます。私はどのように、なぜか、それは実際には長いショットのように思われますが、おそらくToString()はグリッド表示に従って出力をフォーマットしています。

私はそれが当てはまらないと推測しています。MySQLからのデータが実際に文字列としてフォーマットされているか、C#コードが文字列としてそれを読み込んでいるという点で、あなたの元々の仮定は正しいです。このような場合は、実際のSQLを実行して、どのデータ型がレンダリングされているかを確認してください。それは数字ですか?もしそうなら、あなたのC#は数字(reader.GetDecimal(x))かそれともreader.GetValue(x).ToString()でデータ型を無視しているでしょうか?

つまり、MySQLは書式設定を追加して文字列を送信していますか、またはC#で10進数を文字列に変更していますか?何をしているのかを見つけて、それを止めてください。

確かに文字列のフォーマットを解除して小数点に変換することはできますが、それは最終目標の長い長いパスのようです。

関連する問題