Hi there,
I have some difficulties to use editors in an ultra tree. I would like to create a tree just like the PropertyGrid, so I would like to have different data type in the cells (String, Integer, Boolean, Color, Font etc..)
I succedded with the string, the font, the combo but I have problems with the colorpicker (I have the color but it's not editable) and also with the CheckEditor (I can't check/uncheck)
Remark: If I set DataType=typeof(Color) for a colum it works well. But since I want to have different type in the cells I can't do that.
Thanks for your help.
Here is my sample code:
-------------------------------------------------------------
using System;using System.Drawing;using System.Windows.Forms;using Infragistics.Win;using Infragistics.Win.UltraWinTree;using Infragistics.Win.UltraWinEditors;
namespace InfragisticEditors{ public partial class Form1 : Form { private UltraTreeNodeColumn _colName; private UltraTreeNodeColumn _colValue;
public Form1() { InitializeComponent();
InitTree(); }
private void InitTree() { // Clear nodes: this.ultraTree1.Nodes.Clear();
// set outlook view style: this.ultraTree1.ViewStyle = ViewStyle.OutlookExpress; this.ultraTree1.Indent = 10;
// Editable cells: this.ultraTree1.Override.CellClickAction = CellClickAction.EditCell; // Only allow one node to be selected at a time this.ultraTree1.Override.SelectionType = SelectType.Single;
// Use single-pixel borders of 'Control' color for the cells this.ultraTree1.ColumnSettings.BorderStyleCell = UIElementBorderStyle.Solid; this.ultraTree1.ColumnSettings.CellAppearance.BorderColor = SystemColors.Control;
// Hide the headers: this.ultraTree1.ColumnSettings.LabelPosition = NodeLayoutLabelPosition.None;
// Add colums: UltraTreeColumnSet rootColumnSet = this.ultraTree1.ColumnSettings.RootColumnSet; _colName = rootColumnSet.Columns.Add("Name"); _colName.DataType = typeof(string); _colName.LayoutInfo.PreferredCellSize = new Size(this.ultraTree1.Width / 2, 0);
_colValue = rootColumnSet.Columns.Add("Value"); _colValue.DataType = typeof(object); _colValue.LayoutInfo.PreferredCellSize = new Size(this.ultraTree1.Width / 2, 0); _colValue.AllowCellEdit = AllowCellEdit.Full; }
private void Form1_Load(object sender, EventArgs e) { // Add a text node: String str = "Hello world"; UltraTreeNode node1 = this.ultraTree1.Nodes.Add(null, ""); node1.SetCellValue(_colName, "String"); node1.SetCellValue(_colValue, str);
// Add a color: Color color = Color.FromArgb(255, 0, 0); UltraTreeNode node2 = this.ultraTree1.Nodes.Add(null, ""); node2.Cells[_colValue].Editor = new ColorPickerEditor(); node2.SetCellValue(_colName, "Color"); node2.SetCellValue(_colValue, color);
// Add a combo UltraComboEditor editorControl = new UltraComboEditor(); UltraTreeNode node3 = this.ultraTree1.Nodes.Add(null, ""); editorControl.Items.Add("True"); editorControl.Items.Add("False"); editorControl.DropDownStyle = DropDownStyle.DropDownList; node3.Cells[_colValue].EditorControl = editorControl; node3.SetCellValue(_colName, "Combobox"); node3.SetCellValue(_colValue, false);
// Add a checkbox: UltraTreeNode node4 = this.ultraTree1.Nodes.Add(null, ""); node4.Cells[_colValue].Editor = new CheckEditor(); node4.SetCellValue(_colName, "Checkbox"); node4.SetCellValue(_colValue, false);
// Add a collection UltraTreeNode node5 = this.ultraTree1.Nodes.Add(null, ""); EditorWithText textEditor = new EditorWithText(); node5.Cells[_colValue].Editor = textEditor; EditorButton editorButton = new EditorButton("ellipsis"); editorButton.Text = "..."; //editorButton.Click += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(editorButton_Click); textEditor.ButtonsRight.Add(editorButton); node5.Cells[_colValue].AllowEdit = AllowCellEdit.ReadOnly; node5.SetCellValue(_colName, "Button"); node5.SetCellValue(_colValue, "(Collection)");
// Add a font: Font font = new Font("Arial", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); UltraTreeNode node6 = this.ultraTree1.Nodes.Add(null, ""); node6.Cells[_colValue].Editor = new FontNameEditor(); node6.SetCellValue(_colName, "Font"); node6.SetCellValue(_colValue, font); } }}
I believe the problem is that the ColorPickerEditor and CheckEditor do not support editing of type object. If you use a DataFilter (see the property of the same name exposed by those editors), you can work around this, although you would then have to implement the IEditorDataFilter interface to make the conversions.