none
コードから名前を取得したい RRS feed

  • 質問

  • 得意先マスタ:得意先CD・得意先名・担当者CD

    担当者マスタ:担当者CD・担当者名

     

    上記を前提として、得意先マスタメンテナンスを作成していますが、1つわからない部分があり、質問させて頂きます。

    この画面で、担当者CDを入力したら、横に担当者名を表示したいのですが、どうすればよいのでしょうか?

     

    2011年4月14日 4:31

回答

  • 私も全てを完璧に知っているわけではないのですが、たぶんXAMLのみで実現することはできないと思います。また、Viewにデーターベースにアクセスするようなロジックを持たすことはMVVMから外れてしまいます。データーベースを検索する処理はViewModelで行ってください。(※1)

    ※1 今回の場合は検索だけですからViewModelで検索を行っても良いと思いますが、更新などが絡んでくるとViewModelではなく、Modelを扱うクラスを作成し、そこで行った方がすっきりすると思います。MVVMといっても3つのクラスで実現するのではなく、実際には補助的なクラスを導入する方がより実践的です。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク すねお 2011年4月17日 23:43
    2011年4月17日 3:10
    モデレータ

すべての返信

  • Imports System.ComponentModel
    Imports System.Windows.Input
    
    Public Class ViewModel
      Implements INotifyPropertyChanged
    
      Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) _
            Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
    
      ' 担当者CD
      Private _code As Integer
      Public Property Code As Integer
        Get
          Return _code
        End Get
        Set(value As Integer)
          _code = value
          Me.Name = Me.GetName()
          RaisePropertyChanged("Code")
        End Set
      End Property
    
      ' 担当者名
      Private _name As String
      Public Property Name As String
        Get
          Return _name
        End Get
        Set(value As String)
          _name = value
          RaisePropertyChanged("Name")
        End Set
      End Property
    
      Public Sub RaisePropertyChanged(ByVal propertyName As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
      End Sub
    
      Private Function GetName() As String
        Dim ret As String = String.Empty
        ' 何らかの処理で 担当者CD _code の値から担当者名を取得する・・・
        Return ret
      End Function
    
    End Class
    

    こんな感じの ViewModel 用意して、担当者CD と 担当者名 のコントロールにバインドさせとけばいいんではないでしょうか?

    #VB ですみませんが・・・


    ひらぽん http://d.hatena.ne.jp/hilapon/
    2011年4月14日 7:09
    モデレータ
  • この画面で、担当者CDを入力したら、横に担当者名を表示したいのですが、どうすればよいのでしょうか?


    あまりにもご質問が漠然とし過ぎていますので、もう少し詳細を教えて下さい。ひらぽんさんが既に回答されているようなことでしょうか? それとも、例えば得意先マスタのメンテナンス画面で担当者CDを入力すると、そこから担当者マスタのデータを読んできて表示させたいということでしょうか? もっとも通常は担当者CDは人間が覚えきれないと思いますので、検索して選択する別画面を用意することが多いでしょう。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年4月14日 8:03
    モデレータ
  • あまりにもご質問が漠然とし過ぎていますので、もう少し詳細を教えて下さい。ひらぽんさんが既に回答されているようなことでしょうか? それとも、例えば得意先マスタのメンテナンス画面で担当者CDを入力すると、そこから担当者マスタのデータを読んできて表示させたいということでしょうか? もっとも通常は担当者CDは人間が覚えきれないと思いますので、検索して選択する別画面を用意することが多いでしょう。

     

    みなさまありがとうございます。

    得意先マスタのメンテナンス画面で担当者CDを入力すると、そこから担当者マスタのデータを読んできて表示させたいのです。

    ここでいう担当者CDの入力方法は、

    1.別画面より選択して入力

    2.直接手入力

    の2つを考えています。

     

    ひらぽんさんのおっしゃっているViewModelでの処理のさせかたも良いのですが、

    XAMLのResourceを使用した処理方法等・その他の方法はないのでしょうか?

     

    色々な処理方法から、方法を選びたいと考えています。

    もうしわけありませんが、宜しくお願い致します。

    2011年4月14日 23:46
  • 担当者マスタというのはデータベースのテーブルだと思うのですが、そこから事前に全てに担当者情報を読み込んでおき、その中から選択させたいということでしょうか? 担当者情報の数にもよると思いますので、その辺りを確認させて下さい。担当者の数が少なければ事前に全ての担当者情報を読み込んでおくのも良いと思いますが、数が多いようですとその都度データベースから読み込むことになります。一般的には後者の場合でもさほどパフォーマンス的に問題になることはないでしょう。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年4月15日 0:09
    モデレータ
  • 担当者のレコード数が多い場合を想定しております。

    なので、事前に全レコードを読み込む処理は避けようと考えています。

    となった場合、おっしゃるように都度データベースから情報を取得することになると思います。

     

    その方法として、ViewModelに担当者名というプロパティを用意し、Viewとバインドさせる方法は実現できました。

    これでも良いのですが、XAMLにて「ObjectDataProvider.MethodParameters」等を使って、

    Viewのみで処理を完結出来ないかな?と思っています。

     

    2011年4月15日 10:00
  • 私も全てを完璧に知っているわけではないのですが、たぶんXAMLのみで実現することはできないと思います。また、Viewにデーターベースにアクセスするようなロジックを持たすことはMVVMから外れてしまいます。データーベースを検索する処理はViewModelで行ってください。(※1)

    ※1 今回の場合は検索だけですからViewModelで検索を行っても良いと思いますが、更新などが絡んでくるとViewModelではなく、Modelを扱うクラスを作成し、そこで行った方がすっきりすると思います。MVVMといっても3つのクラスで実現するのではなく、実際には補助的なクラスを導入する方がより実践的です。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク すねお 2011年4月17日 23:43
    2011年4月17日 3:10
    モデレータ