KeiStory

C# ExpandObject 사용하여 동적 데이터 다루기

 

동적 데이터를 다룰 때 ExpandObject 를 사용하게됩니다.

이번에 DevExpress GridControl 를 사용하게 되었는데 Property가 있어야 바인딩이 가능한 구조라

쿼리 결과를 담기 위해서는 Dynamic 타입으로는 바인딩이 불가능했습니다.

바인딩할 데이터가 동일하면 Class 를 하나 만들어 사용하면되지만

동적데이터를 바인딩하려면 ExpandObject 를 사용해야합니다.

 

아래와 같이 AddProperty 함수를  만들어 Key,Value 를 인자로 받아서 처리하도록 하고

private void AddProperty(ExpandoObject expando, string propertyName, object propertyValue)
{
    var expandoDic = expando as IDictionary<string,object>;
    
    if(expandoDic.ContainsKey(propertyName))
    {
      expandoDic[propertyName] = propertyValue;
    }
    else
    {
      expandoDic.Add(propertyName, propertyValue);
    }
}

 

아래처럼 사용합니다.

dynamic expando = new ExpandoObject();
AddProperty(expando, "ID", 1);
AddProperty(expando,"Name","kang");

이렇게 하면 ExpandObject 에 Property 로 ID = 1, Name = Kang 이 설정됩니다.

 

ObservableCollection<Object> 에 담아  DevExpress GridControl  의 DataSource 로 사용하면

데이터가 정상적으로 표시됩니다.

ObservableCollection<Object> dataList = new ObservableCollection<object>();

foreach (var keyvalue in datas)
{
    dynamic expando = new ExpandoObject();
    AddProperty(expando, "ID", keyvalue.key);
    AddProperty(expando, "Name", keyvalue.value);

    dataList.Add(expando);
}

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band