none
値段をシームレスに扱いたい RRS feed

  • 質問

  • データベースのmoneyとTextBoxをバインドすると、
    テキストボックスに¥100,000などのように通貨形式で
    表示されますが、これを元に計算を行うたびに、
    ¥と,をReplaceしていますが、Replaceを行わずに
    シームレスに扱える方法は何かありますでしょうか?
    2006年5月29日 9:22

すべての返信

  • Text1に Foo データセット Bar テーブル Hoge カラム がバインドされていたとすると以下のように値が取れます。

    Dim bm As BindingManagerBase = Text1.BindingContext(ds, "Foo.Bar")
    Dim drv As DataRowView = CType(bm.Current, DataRowView)
    Console.Write(drv("Hoge"))

    2006年5月29日 12:02
  • もしくは、BindingSourceがあるなら、

    DataRowView drv = bindingSource1.Current as DataRowView;

    としておいて、drv["hoge"]でオブジェクトが手に入ります。

    2006年5月30日 2:25
    モデレータ
  • 解決しました。えむナウさん、trapemiyaさんありがとうございます。

    ついでBinding周りでひとつ困っていることがあるのですが、レコードの追加で、
    フォームを開くときに

    tblCustomerBindingSource.AddNew();

    を行い、登録ボタンを押すと以下の処理を行い、レコードを新規登録したいのですが、
    うまくいきません。

    this.Validate();
    this.tblCustomerBindingSource.EndEdit();
    int rows = this.tblCustomerTableAdapter.Update(this.mydataSet.TblCustomer);
    (rowsは0)

    EndEdit()のあとにmydataset.HasChangedを確認するとFalseでした。
    原因が分からないのですが、もしかしたらTableAdapterのUpdateクエリが、
    オプティミスティック式のクエリになっていることが原因でしょうか?
    (そうだとしたら、Updateクエリが自動的に作られるのでどうやって回避するのでしょうか)

    Binding周りに関して理解が薄いので、根本的に考え方や使い方が間違っているのかも
    しれませんが、ご指摘いただければ幸いです。

    2006年5月30日 5:42
  • 簡単なコードを書いてテストしてみましたが、うまく登録されました。

    EndEdit()のあとにmydataset.HasChangedを確認するとFalseでした。

    AddNew()をしているので、ここはTrueにならないといけないんですけどね???
    AddNew()の後に何らかの原因で、新規登録状態がキャンセルされているのかな???
    できればもう少し詳しいコードをお願いします。

    2006年5月30日 11:33
    モデレータ
  • ありがとうございます。
    自分でも簡単なものを作成しテストしたところ、上手くいきました。
    方法自体は間違っていないということでしょうか。

    本物のプロジェクトのほうでは以下のように確認しましたが、
    更新行数も、データテーブルの行数も0となり、
    更新が上手くいっていないようです。

    this.Validate();
    bindingSourceTblCustomer.EndEdit();
    int rows = this.tblCustomerTableAdapter.Update(dataSetRealEstate.TblCustomer);
    (rowsは0になります)

    int n = dataSetRealEstate.TblBukken.Rows.Count;
    (nは0のままです)

    もしかしたらUpdate自体が上手くいっていないように思えてきまして、
    実際に発行されているクエリを見たいのですが、捕らえられないもの
    でしょうか?(サーバはSQL Expressです)

    2006年5月30日 13:19
  • Profilerでいけます。。。

    SQL Server 2005 Developer Editionに付属のManagement Studioにはついています。

    2006年5月30日 14:40
  • ありがとうございます。

    SQL ExpressなのでProfilerは残念ながらないです。。。

    いろいろ試していたのですが、原因が分かりました。Form_Load内で

    typeTableAdapter.Fill(mydataset.TblType)
    comboBoxType.SelectedIndex = 0;//comboBoxTypeはTblTypeとバインディングしています。

    としていたのが原因だったようで、なぜこれが問題なのかは分かりません。

    2006年5月31日 8:42