、あなたは次の動作を取得していることはかなり奇妙に思える:
私は、データをロードすると、検証が、しかし、値の前に£記号を示しているという意味で動作しますグリッドに、行の「手数料」のセルをクリックして、セルは、ちょうど750または750.00
正しい部分は、あなたが言ったように、あなたの通貨記号を取得する必要があり、フォーマットはしなければならないということであるのではなく、750.0000を示し編集モードでない場合も同様です:£750.00
しかし、他の部分は、編集モードで奇妙です。エディタでは、DataTable列の生の値が実際に表示されますが、「750.00000000」または「750.00000」の場合は、「750.0000」ではなく「750」と表示されます。
列が通貨に設定される前に、その行にある正確な値は何ですか?あなたはMath.Round
if (e.Cell.Column.Key == "Fee")
{
e.Cell.Value = Math.Round(Convert.ToDecimal(e.Cell.Value), 2);
}
のような方法があるのUltraGridのultraGrid1_BeforeCellActivate
イベントに適切にフックしている、としている場合
また、あなたは関係なく、正確なの、唯一の2桁の整数の後に、終わるだろうDataTableの値。
アプリケーションで使用しているInfragisticsコントロールのバージョンはどれですか? UltraGridに他の変更や設定が適用されていますか?
編集:別のノートで
、あなたはまだこれらの変更のすべての後に同じ動作が発生する場合、それはいくつかのシステムがそれをし続けることを意味する、とするとき、編集中に、まだ、小数点以下4桁を表示DataTypeがDecimalのデータ列を扱う場合のモード。だから、それを変更するには、2つの可能性がなければなりません:
- 変更「手数料」のデータ欄に「ダブル」の基礎となるデータ型を、あなたはもうその振る舞いを持っていません。
何らかの理由で数字1を入力できない場合は、「料金」列のMaskInputプロパティで再生する必要があります。これは、編集モードで表示されている内容を変更できるようにします。
private void ultraGrid1_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e)
{
e.Layout.Bands[0].Columns["Fee"].Format = "C";
//Set the mask to be in the following format:
e.Layout.Bands[0].Columns["Fee"].MaskInput = "nnnn.nn";
//If you would like to see the £ as well, you could use the one instead:
e.Layout.Bands[0].Columns["Fee"].MaskInput = "£nnnnn.nn";
//If you would like to change the under score (_), with another char like empty space () you could do it like that:
e.Layout.Bands[0].Columns["Fee"].PromptChar = ' ';
}
こんにちは、応答に感謝します。この「BeforeCellActivate」メソッドは問題を解決していませんが、小数点以下4桁まで表示されます。 – Harambe
サンプル全体をそのままテストしましたか、それともプロジェクトでのみ実装しようとしましたか?新しい値が本当に短縮され、右の列の変換が行われることを確かめますか? –
私は自分のプロジェクトに実装しました。私は 'PrivateCellActivate'メソッドだけを' Private DataTable'ブロックを使用していません。私は間違いなく正しい列を使用しています – Harambe