2012-08-13 105 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一起工作的编辑菜单。

如果网格的复制和粘贴功能满足您的需求,则可以为网格本身公开一个上下文菜单,以显示这些相同的选项。