DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridのカンマ表示について

環境/言語:[WindowsXP VB.NET]
分類:[.NET]

はじめまして。ヘルプやネットでも調べてみたのですが、どうにも解決方法がみつからず困っています。
ご教示願います。

以下のように、テーブルスタイルを指定し、
DataGridでテーブルを表示しているのですが
開いた画面で、セルの内容を変更しようとすると、元の数値に戻ってしまいます。
対象のセルは、数値型&カンマ編集しています。
セル全体(表示されている数値すべて)を選択して変更すると、入力した値に変更されます。
部分的に削除して変更しようとすると、変更前に戻ってしまいます・・・。
なにか、テーブルスタイルの設定方法がまずいのでしょうか?
(例)・1,500→1,599と「00」の部分だけ変更しようとすると元に戻ってしまう。
   ・1,500を全選択後削除し、数値を入れなおすと正しく変更される。

Private Function table_style()

Dim clmStyle1 As DataGridTextBoxColumn
Dim tblStyle As DataGridTableStyle
Dim clmStyle1 As DataGridTextBoxColumn

clmStyle1 = CType(tblStyle.GridColumnStyles("引落金額"), DataGridTextBoxColumn)
clmStyle1 = New DataGridTextBoxColumn
clmStyle1.MappingName = "引落金額"
clmStyle1.HeaderText = "引落金額"
clmStyle1.Width = 105
clmStyle1.Format = "#,##0"
clmStyle1.Alignment = HorizontalAlignment.Right
tblStyle.GridColumnStyles.Add(clmStyle1)

End Function
2006/10/11(Wed) 17:38:52 編集(投稿者)

,があると数字だけで構成されていないから蹴られているんですね。
そこにアルファベットを入力した場合と同じ動作です。
原因がわかれば、,をデータテーブルに書き込む時に取ってしまえばいいんです。

AddHandler clmStyle1.TextBox.Leave, AddressOf TextBox_Leave

としておいて、

Private Sub TextBox_Leave(sender As Object, e As EventArgs)
   CType(sender, TextBox).Text = CType(sender, TextBox).Text.Replace(",", String.Empty)
End Sub
遅くなりましたm(__)m
trapemiyaさん、ありがとうございます。

なるほど・・・、そういうことですか。
それで対象のセルをクリックした時に、動かしたかったので
> AddHandler clmStyle1.TextBox.Leave, AddressOf TextBox_Leave

AddHandler clmStyle1.TextBox.MouseUp, AddressOf TextBox_Leave
とし、

> Private Sub TextBox_Leave(sender As Object, e As EventArgs)
> CType(sender, TextBox).Text = CType(sender, TextBox).Text.Replace(",", String.Empty)
> End Sub


Private Sub TextBox_Leave(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles DG_kokyaku1.MouseUp

CType(sender, TextBox).Text = CType(sender, TextBox).Text.Replace(",", String.Empty)

End Sub

としてみたのですが、実行すると
「指定されたキャストは有効ではありません」と表示されてしまいます・・・。
データ型がおかしいのでしょうか?
すみません、今回VB.NETを初めて扱い出したばかりで・・・。
2006/10/12(Thu) 20:03:45 編集(投稿者)

■No17880に返信(もり*2さんの記事)
> 「指定されたキャストは有効ではありません」と表示されてしまいます・・・。
> データ型がおかしいのでしょうか?
> すみません、今回VB.NETを初めて扱い出したばかりで・・・。

実際のコードはC#で試しているので、微妙な違いが出ていますね。たぶん、Handles DG_kokyaku1.MouseUpが問題なんじゃないでしょうか?

Dim dgTextBox as TextBox

と宣言しておいて、

dgTextBox = clmStyle1.TextBox

とします。

で、

Private Sub TextBox_MouseUp(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles dgTextBox.MouseUp
 
     CType(sender, TextBox).Text = CType(sender, TextBox).Text.Replace(",", String.Empty)
  ' または
    ' dgTextBox.Text = dgTextBox.Text.Replace(",", String.Empty)
 
End Sub

かな? (実際にコードが動くことを確認してません)

それから、イベントプロシージャの名前はわかりやすい名前にした方が良いです。
MouseUpイベントプロシージャに、TextBox_Leaveという名前を付けるのは良くないです。
あと、MouseUpより、Enterイベントの方が良くないでしょうか?

#全体がグレーになることから脱出できない(^^;
■No17882に返信(trapemiyaさんの記事)
> 実際のコードはC#で試しているので、微妙な違いが出ていますね。たぶん、Handles DG_kokyaku1.MouseUpが問題なんじゃないでしょうか?
>
> Dim dgTextBox as TextBox
>
> dgTextBox = clmStyle1.TextBox
>
> Private Sub TextBox_MouseUp(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles dgTextBox.MouseUp
>
> CType(sender, TextBox).Text = CType(sender, TextBox).Text.Replace(",", String.Empty)
>   ' または
> ' dgTextBox.Text = dgTextBox.Text.Replace(",", String.Empty)
>
> End Sub

早速のお返事、ありがとうございます!
出来ました!!

Dim dgTextBox As TextBox

clmStyle1 = CType(tblStyle.GridColumnStyles(1), DataGridTextBoxColumn)
dgTextBox = clmStyle1.TextBox

AddHandler dgTextBox.Enter, AddressOf kingaku_Up

Private Sub kingaku_Up(ByVal sender As System.Object, ByVal e As EventArgs)

CType(sender, TextBox).Text = CType(sender, TextBox).Text.Replace(",", String.Empty)

End Sub

で、出来ましたぁ♪
ホントに助かりました!ありがとうございます!!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板