2017-04-06 12 views
0

안녕하세요. 이 말을 잘 모르지만 나와 함께 있으십시오. 다양한 유형의 다양한 속성을 가진 여러 클래스의 인스턴스가 여러 개 있습니다. 내 사용자 (내가 일하는 소기업)는 해당 변수에 대한 사용자 지정 계산을 수행하고 새 DGV 열에 결과를 표시하려고합니다. 예 :최종 사용자가 클래스의 사용자 지정 속성을 만들 수 있도록 허용합니다. 해당 속성을 DGV에 표시하십시오.

DGV1은 (Myclass의) 목록을 데이터 소스로 사용합니다. 열은 미리 정의 된 대신 자동으로 추가됩니다.

한 명의 사용자가 항상 dgv1에서보고 싶은 속성을 생각합니다. Iv'e는 이런 종류의 일을하지 않고 어디서부터 시작하는 단서가 없다

- 그는이 새로운 속성이 (Myclass.property2 Myclass.property1)의 결과가 될 것을 결정한다. 나는 가능한 모든 속성 조합을 어렵게 코딩 할 수 없다는 것을 알고 있습니다. 또한 사용자가 필요로하는 모든 조합을 예측할 수있는 방법을 알고 있습니다.

기본적으로 Excel처럼 유연해야합니다. 나는 이러한 객체의 속성에 대한 큐레이팅을위한 logictree 스타일의 커스텀 필터 빌더를 가지고있다. 일부 사용자는 이러한 사용자 지정 속성을 필터의 노드로 사용할 수 있기를 원합니다.

런타임에 클래스에 속성을 추가하고 하드 코딩 된 속성으로 동작하는 방식이 있는지 확실하지 않습니다.

이 문제에 대한 귀하의 생각과 조언에 감사드립니다. 또한, 내가 어떤 것이 든 불분명하다면 사과드립니다. 내가 뭔가를 명확히해야하는지 알려주세요. 감사합니다.

* 편집 # 나는 Typebuiler을 발견했으며 이에 대해 읽고 있습니다.

답변

0

런타임에 클래스에 속성을 추가하는 실제 방법이 없습니다. 클래스가 생성되면 기본적으로 돌로 설정됩니다.

그러나 클래스의 "속성"이름과 값을 유지하기 위해 Dictionary (Of String, Object)를 사용할 수 있습니다. 이와 같은 모든 속성을 만들고 추가 및 제거 가능한 속성을 시뮬레이션 할 수 있습니다. 그러나 이것은 대상으로 제한됩니다.

고객이 계산을 수행 할 수있게하려면 스크립트 엔진을 작성하거나 사용해야합니다.

자바 스크립트 엔진을 사용하는 것이 좋습니다. JavaScript를 사용하면 원할 때마다 속성을 추가 할 수 있으며 JavaScript는 완전한 스크립트 언어로 사용됩니다 (JS는 웹에만 국한되지 않음). NiL.JS (https://github.com/nilproject/NiL.JS)를 엔진으로 제안 할 수 있습니다. 그것은 빠르고 JS에서 닷넷으로 객체를 쉽게 변환 할 수 있습니다. 그것은 좀 더 어려운 JS 추가 속성을 검색 할 수있어

Dim o As New YourCustomObject() ' Your object (e.g. has a property x (double)) 
o.x = 5.0 
Dim c As New Context() ' Create a new JS environment 
c.DefineVariable("o").Assign(JSValue.Marshal(o)) ' Transfer the variable 
c.Eval("o.x = 6.0;") ' Change the value in JS and it will change in .Net 
MsgBox(o.x) ' 6.0 

하지만이 가능합니다 : 여기

그것을 사용하는 방법입니다. GitHub 페이지에서 예제를 살펴 보는 것이 좋습니다.

나는 Nil.JS의 라이센스에 관해 모른다. 그러나 비슷한 엔진이있다.