2012-08-13 107 views
0

我有一個2列的ultrawridrid。要求是打開一個右鍵菜單,其中有一個選項「複製」,當任何單元格被右鍵單擊時。用戶可以選擇「複製」,然後複製單元格內容。在UltraWinGrid中更改列的類型

我已經有了擴展類「Label」的類「ExtendedLabel」。該標籤具有與上述相同的功能;區別在於標籤上發生的右鍵單擊。

的問題是;我怎樣才能把這個ExtendedLabel作爲ultrawridrid的列數據類型?這是我試過的:

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

未經測試,但我認爲網格綁定到您的課程的公共成員。
如果這是可行的,將內部標籤的可見性更改爲私有,並將Item和Value公開爲兩個內部標籤的文本。

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

好的。但是這會將ExtendedLabel的功能應用於UltraGrid的單元嗎?我需要右鍵單擊我的單元格,以便出現上下文菜單。 – Sandeep 2012-08-13 13:16:00

+0

不,要更改單元網格編輯器的功能,您需要構建自己的編輯器。這個過程有點複雜。在infragistics站點查看[this example](http://devcenter.infragistics.com/Support/KnowledgeBaseArticle.aspx?ArticleID=2361)。另外,如果您安裝了示例,您可以在示例中找到工作解決方案:自定義編輯控件。但是,讓我說,不需要付出努力只需添加一個自定義菜單。您可以輕鬆地將自定義菜單添加到網格,並檢查您是否在右側列顯示它。 – Steve 2012-08-13 13:29:41

+0

使用自定義標籤的更簡單方法是使用2009年第2卷中添加的ControlContainerEditor:http://help.infragistics.com/NetAdvantage/WinForms/Current/CLR2.0/?page=WinControlContainerEditor_Embed_Any_Control_within_WinGrid_Cell_using_UltraControlContainerEditor_Component.html – alhalama 2012-08-14 02:00:08

0

最好的方法是將網格綁定到暴露所需屬性的數據對象。例如,你可以有下面的類:

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

然後創建一個列表並綁定,爲電網作爲電網將創建一個列每個公共屬性,所以你會得到你在網格預期值。請注意,如果列表可以更改,並且網格需要更新以響應這些更改,則應該使用BindingList而不是List。

默認情況下,網格將允許編輯值,並且您將在網格中使用鍵盤創建複製和粘貼行爲。有一個example in the help,它顯示瞭如何在應用程序中使用與WinGrid一起工作的編輯菜單。

如果網格的複製和粘貼功能滿足您的需求,則可以爲網格本身公開一個上下文菜單,以顯示這些相同的選項。