2012-08-13 4 views
0

2 열이있는 ultrawingrid가 있습니다. 요구 사항은 셀을 마우스 오른쪽 버튼으로 클릭 할 때 "복사"옵션을 사용하여 컨텍스트 메뉴를 여는 것입니다. 그런 다음 사용자는 "복사"를 선택하면 셀 내용을 복사해야합니다.UltraWinGrid의 열 유형 변경

클래스 "Label"을 확장하는 "ExtendedLabel"클래스가 이미 있습니다. 이 라벨은 위와 동일한 기능을합니다. 차이점은 레이블에서 오른쪽 클릭이 발생한다는 것입니다.

문제는 다음과 같습니다. 이 ExtendedLabel을 ultrawingrid의 열 데이터 유형으로 어떻게 통합 할 수 있습니까? 이것이 제가 시도한 것입니다 :

public class Content 
{ 
    public Content() 
    { 
     Item = new ExtendedLabel(); 
     Value = new ExtendedLabel(); 
    } 

    ExtendedLabel Item = new ExtendedLabel(); 
    ExtendedLabel Value = new ExtendedLabel(); 
} 

Content a = new Content(); 
a.Item.Text = "Item1"; // The ExtendedLabel has a property called "Text" 
a.Value.Text = "Value1"; 

Content b = new Content(); 
a.Item.Text = "Item2"; 
a.Value.Text = "Value2"; 

List<Content> contents = new List<Content>(); 
contents.Add(a); 
contents.Add(b); 

ultrawingrid.DataSource = contents; 

이제 그리드가 이와 같습니다. 내가 원하는 것을

반면
Item       Value 
------------------------------------------------------------- 
{ExtendedLabel, Text: Item1} {ExtendedLabel, Text: Value1} 
{ExtendedLabel, Text: Item2} {ExtendedLabel, Text: Value2} 

이었다 :

Item  Value 
--------------- 
Item1 Value1 
Item1 Value1 

모든이 외에도, 나는 정확히이 일을하고 있습니까? 이것이 최선의 접근 방법인가요? 그렇지 않다면, 어떻게?

TIA!

답변

0

테스트되지 않았지만 그리드가 사용자의 공용 멤버 클래스에 바인딩된다고 생각합니다.
이것이 가능한 경우 내부 라벨의 공개 설정을 비공개로 변경하고 항목 및 값을 두 개의 내부 라벨의 텍스트로 표시합니다.

public class Content 
{ 
    public Content() 
    { 
     Item = new ExtendedLabel(); 
     Value = new ExtendedLabel(); 
    } 

    private ExtendedLabel internal_Item = new ExtendedLabel(); 
    private ExtendedLabel internal_Value = new ExtendedLabel(); 

    public string Item 
    { 
     get{return internal_Item.Text;} 
     set{internal_Item.Text = value;} 

    } 
    public string Value 
    { 
     get{return internal_Value.Text;} 
     set{internal_Value.Text = value;} 
    } 
} 
+0

확인. 그러나 이것은 UltraGrid의 셀에 ExtendedLabel의 기능을 적용 할 것입니까? 내 셀을 마우스 오른쪽 단추로 클릭해야 컨텍스트 메뉴가 나타납니다. – Sandeep

+0

아니요, 셀 눈금 편집기의 기능을 변경하려면 자신 만의 편집기를 만들어야합니다. 과정은 약간 복잡합니다. Infragistics 사이트의 [이 예제] (http://devcenter.infragistics.com/Support/KnowledgeBaseArticle.aspx?ArticleID=2361)를 참조하십시오. 또한 샘플을 설치 한 경우 샘플 : 사용자 정의 편집 컨트롤에서 실제 솔루션을 찾을 수 있습니다. 그러나 사용자 정의 메뉴를 추가하는 것만으로는 충분하지 않습니다. 그리드에 사용자 정의 메뉴를 쉽게 추가하고 표시하려는 오른쪽 열에 있는지 확인할 수 있습니다. – Steve

+0

사용자 지정 레이블을 사용하는 더 간단한 방법은 2009 Volume 2에 추가 된 ControlContainerEditor를 사용하는 것입니다. http://help.infragistics.com/NetAdvantage/WinForms/Current/CLR2.0/?page=WinControlContainerEditor_Embed_Any_Control_within_WinGrid_Cell_using_UltraControlContainerEditor_Component.html – alhalama

0

가장 좋은 방법은 그리드를 필요한 속성을 노출하는 데이터 개체에 바인딩하는 것입니다.

public class DataItem 
{ 
    public string Item {get;set; } 
    public string Value {get;set;} 
} 

그런 다음 목록을 작성하고 당신이 그리드에 기대 값을 얻을 수 있도록 각 공용 속성에 대한 열을 생성합니다 그리드와 그리드에 그 바인딩 : 예를 들어, 당신은 다음과 같은 클래스를 가질 수있다. 목록이 변경 될 수 있고 해당 변경에 대한 응답으로 표를 업데이트해야하는 경우 List가 아닌 BindingList를 사용해야합니다.

기본적으로 격자는 값을 편집 할 수 있으며 키보드로 작업하는 격자에 복사 및 붙여 넣기 동작을 내장합니다. WinGrid와 함께 작동하는 응용 프로그램에서 편집 메뉴를 가질 수있는 방법을 보여주는 example in the help이 있습니다.

그리드의 복사 및 붙여 넣기 기능이 사용자의 요구를 충족시키는 경우 동일한 옵션을 제공하는 그리드 자체의 컨텍스트 메뉴를 노출 할 수 있습니다.