2015年3月9日月曜日

C# オブジェクトのメンバ情報とメンバの値を動的に取得する

WPFのTelerik GridViewがclassからデータ表示になっている
データがMVVM方式でclassからデータを流し込むので
Cellの位置は取得出来ないらしい  GetIndexとかの関数が無かった

仕方ないので、Telerik.Windows.Controls.GridViewCellInfo s = GridView1.SelectedCells[0];
上記より、選択した行のデータを取得後
var c = s.Column;  でカラム情報を取得
 var item = (ATR_ScheduleView)s.Item;

g作業者ID = GetItem(item, typeof(ATR_ScheduleView), c.Header);

   private string GetItem(object targetobj, Type t, string iName) {

            string vValue = "";

            //using System.Reflection;が必要
            //メンバを取得する
            MemberInfo[] members = t.GetMembers(
                BindingFlags.Public |
                BindingFlags.Instance |
                BindingFlags.DeclaredOnly);

            foreach (MemberInfo m in members) {
                //メンバの型と、名前を表示する
                //メンバの型がプロパティなら
                if (m.MemberType.ToString().Equals("Property") && m.Name == iName) {

                    PropertyInfo pr = t.GetProperty(m.Name);
                    object resobj = pr.GetValue(targetobj, null);

                    vValue = resobj.ToString();
                }
            }
            return vValue;
        }

取得した行データ(item)のヘッダ位置から選択したcellの値を取得

0 件のコメント:

コメントを投稿