402 lines
13 KiB
C#
402 lines
13 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.ComponentModel.Design;
|
|
using System.Data;
|
|
using System.Data.SqlTypes;
|
|
using System.Drawing.Design;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.Design;
|
|
using DevComponents.DotNetBar.Controls;
|
|
using DevComponents.DotNetBar.SuperGrid;
|
|
|
|
namespace DevComponents.SuperGrid.Design
|
|
{
|
|
public class SuperGridActionList : DesignerActionList,
|
|
ITypeDescriptorContext, IWindowsFormsEditorService, IServiceProvider
|
|
{
|
|
#region Private variables
|
|
|
|
private SuperGridControl _SuperGrid;
|
|
|
|
private PropertyDescriptor _PropertyDescriptor;
|
|
private IComponentChangeService _ChangeService;
|
|
|
|
private IDesignerHost dh;
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// SuperGridActionList
|
|
/// </summary>
|
|
/// <param name="superGrid">Associated SuperGridControl</param>
|
|
public SuperGridActionList(SuperGridControl superGrid)
|
|
: base(superGrid)
|
|
{
|
|
_SuperGrid = superGrid;
|
|
|
|
_ChangeService = Component.Site.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
|
|
}
|
|
|
|
#region Public properties
|
|
|
|
/// <summary>
|
|
/// Gets or sets the GridPanel DataSource
|
|
/// </summary>
|
|
[AttributeProvider(typeof(IListSource))]
|
|
public object DataSource
|
|
{
|
|
get { return (_SuperGrid.PrimaryGrid.DataSource); }
|
|
set { SetValue("DataSource", value); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether rows can be deleted
|
|
/// </summary>
|
|
public bool AllowRowDelete
|
|
{
|
|
get { return (_SuperGrid.PrimaryGrid.AllowRowDelete); }
|
|
set { SetValue("AllowRowDelete", value); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether rows can be Inserted
|
|
/// </summary>
|
|
public bool AllowRowInsert
|
|
{
|
|
get { return (_SuperGrid.PrimaryGrid.AllowRowInsert); }
|
|
set { SetValue("AllowRowInsert", value); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether the Insert Row is displayed at runtime
|
|
/// </summary>
|
|
public bool ShowInsertRow
|
|
{
|
|
get { return (_SuperGrid.PrimaryGrid.ShowInsertRow); }
|
|
set { SetValue("ShowInsertRow", value); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets which Grid Lines are displayed
|
|
/// </summary>
|
|
public GridLines GridLines
|
|
{
|
|
get { return (_SuperGrid.PrimaryGrid.GridLines); }
|
|
set { SetValue("GridLines", value); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether Tree Lines are displayed
|
|
/// </summary>
|
|
public bool ShowTreeLines
|
|
{
|
|
get { return (_SuperGrid.PrimaryGrid.ShowTreeLines); }
|
|
set { SetValue("ShowTreeLines", value); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether Tree Buttons are displayed
|
|
/// </summary>
|
|
public bool ShowTreeButtons
|
|
{
|
|
get { return (_SuperGrid.PrimaryGrid.ShowTreeButtons); }
|
|
set { SetValue("ShowTreeButtons", value); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether to use the Alternate Row Style
|
|
/// </summary>
|
|
public bool UseAlternateRowStyle
|
|
{
|
|
get { return (_SuperGrid.PrimaryGrid.UseAlternateRowStyle); }
|
|
set { SetValue("UseAlternateRowStyle", value); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether to use the Alternate Column Style
|
|
/// </summary>
|
|
public bool UseAlternateColumnStyle
|
|
{
|
|
get { return (_SuperGrid.PrimaryGrid.UseAlternateColumnStyle); }
|
|
set { SetValue("UseAlternateColumnStyle", value); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether to allow multi selection
|
|
/// </summary>
|
|
public bool MultiSelect
|
|
{
|
|
get { return (_SuperGrid.PrimaryGrid.MultiSelect); }
|
|
set { SetValue("MultiSelect", value); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the selection granularity
|
|
/// </summary>
|
|
public SelectionGranularity SelectionGranularity
|
|
{
|
|
get { return (_SuperGrid.PrimaryGrid.SelectionGranularity); }
|
|
set { SetValue("SelectionGranularity", value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SetValue
|
|
|
|
private void SetValue(string property, object value)
|
|
{
|
|
_ChangeService.OnComponentChanging(_SuperGrid.PrimaryGrid, null);
|
|
|
|
GetPrimaryGridPropertyByName(property).SetValue(_SuperGrid.PrimaryGrid, value);
|
|
|
|
_ChangeService.OnComponentChanged(_SuperGrid.PrimaryGrid, null, null, null);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region GetPrimaryGridPropertyByName
|
|
|
|
/// <summary>
|
|
/// Gets the PrimaryGrid property via the given name
|
|
/// </summary>
|
|
/// <param name="propName">Property name</param>
|
|
/// <returns>PropertyDescriptor</returns>
|
|
private PropertyDescriptor GetPrimaryGridPropertyByName(string propName)
|
|
{
|
|
PropertyDescriptor prop =
|
|
TypeDescriptor.GetProperties(_SuperGrid.PrimaryGrid)[propName];
|
|
|
|
if (prop == null)
|
|
throw new ArgumentException("Matching property not found.", propName);
|
|
|
|
return (prop);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region GetSortedActionItems
|
|
|
|
/// <summary>
|
|
/// Gets the SortedActionItems
|
|
/// </summary>
|
|
/// <returns>DesignerActionItemCollection</returns>
|
|
public override DesignerActionItemCollection GetSortedActionItems()
|
|
{
|
|
DesignerActionItemCollection items = new DesignerActionItemCollection();
|
|
|
|
items.Add(new DesignerActionPropertyItem("DataSource", "Data Source",
|
|
"Data", "Sets the GridPanel Data Source."));
|
|
|
|
items.Add(new DesignerActionPropertyItem("AllowRowDelete", "Allow Row Delete",
|
|
"User Interaction", "Determines whether rows can be deleted."));
|
|
|
|
items.Add(new DesignerActionPropertyItem("AllowRowInsert", "Allow Row Insert",
|
|
"User Interaction", "Determines whether rows can be inserted."));
|
|
|
|
items.Add(new DesignerActionPropertyItem("ShowInsertRow", "Show Insert Row",
|
|
"User Interaction", "Determines whether the InsertRow is shown at runtime."));
|
|
|
|
items.Add(new DesignerActionPropertyItem("GridLines", "Grid Lines",
|
|
"Appearance", "Determines which Grid Lines are displayed."));
|
|
|
|
items.Add(new DesignerActionPropertyItem("ShowTreeLines", "Show Tree Lines",
|
|
"Appearance", "Determines whether Tree Lines are displayed."));
|
|
|
|
items.Add(new DesignerActionPropertyItem("ShowTreeButtons", "Show Tree Buttons",
|
|
"Appearance", "Determines whether Tree Buttons are displayed."));
|
|
|
|
items.Add(new DesignerActionPropertyItem("UseAlternateColumnStyle", "Use Alternate Column Style",
|
|
"Style", "Determines whether to use the defined Alternate Column Style."));
|
|
|
|
items.Add(new DesignerActionPropertyItem("UseAlternateRowStyle", "Use Alternate Row Style",
|
|
"Style", "Determines whether to use the defined Alternate Row Style."));
|
|
|
|
items.Add(new DesignerActionPropertyItem("SelectionGranularity", "Selection Granularity",
|
|
"Behavior", "Determines user selection granularity."));
|
|
|
|
items.Add(new DesignerActionPropertyItem("MultiSelect", "Enable Multi Selection",
|
|
"Behavior", "Determines whether Multi Selection is enabled."));
|
|
|
|
if (DataSource != null)
|
|
{
|
|
items.Add(new DesignerActionMethodItem(this, "GenBoundColumns", "Generate Bound Columns",
|
|
"Data1", "Clears all previous bound column definitions and\r\ngenerates new column definitions from current DataSource."));
|
|
}
|
|
|
|
items.Add(new DesignerActionMethodItem(this, "EditColumns", "Edit Columns...", "Data2"));
|
|
items.Add(new DesignerActionMethodItem(this, "EditRows", "Edit Rows...", "Data2"));
|
|
|
|
return (items);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EditColumns
|
|
|
|
/// <summary>
|
|
/// EditColumns
|
|
/// </summary>
|
|
private void EditColumns()
|
|
{
|
|
_PropertyDescriptor = TypeDescriptor.GetProperties(_SuperGrid.PrimaryGrid)["Columns"];
|
|
|
|
UITypeEditor editor = (UITypeEditor)_PropertyDescriptor.GetEditor(typeof(UITypeEditor));
|
|
|
|
if (editor != null)
|
|
editor.EditValue(this, this, _SuperGrid.PrimaryGrid.Columns);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EditRows
|
|
|
|
/// <summary>
|
|
/// EditRows
|
|
/// </summary>
|
|
private void EditRows()
|
|
{
|
|
_PropertyDescriptor = TypeDescriptor.GetProperties(_SuperGrid.PrimaryGrid)["Rows"];
|
|
|
|
UITypeEditor editor = (UITypeEditor)_PropertyDescriptor.GetEditor(typeof(UITypeEditor));
|
|
|
|
if (editor != null)
|
|
editor.EditValue(this, this, _SuperGrid.PrimaryGrid.Rows);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region GenBoundColumns
|
|
|
|
/// <summary>
|
|
/// GenBoundColumns
|
|
/// </summary>
|
|
private void GenBoundColumns()
|
|
{
|
|
dh = (IDesignerHost)GetService(typeof(IDesignerHost));
|
|
|
|
if (dh != null)
|
|
{
|
|
DesignerTransaction dt = dh.CreateTransaction();
|
|
|
|
try
|
|
{
|
|
IComponentChangeService change =
|
|
GetService(typeof(IComponentChangeService)) as IComponentChangeService;
|
|
|
|
if (change != null)
|
|
{
|
|
change.OnComponentChanging(Component, null);
|
|
|
|
GridColumnCollection colc = _SuperGrid.PrimaryGrid.Columns;
|
|
|
|
_SuperGrid.PrimaryGrid.GenerateColumns(CreateGridColumn);
|
|
|
|
GridColumnCollection cc = _SuperGrid.PrimaryGrid.Columns;
|
|
|
|
for (int i = cc.Count - 1; i >= 0; i--)
|
|
{
|
|
GridColumn col = cc[i];
|
|
|
|
if (string.IsNullOrEmpty(col.DataPropertyName) == false && col.IsDataBound == false)
|
|
cc.RemoveAt(i);
|
|
}
|
|
|
|
change.OnComponentChanged(Component, null, null, null);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
dt.Cancel();
|
|
}
|
|
finally
|
|
{
|
|
if (dt.Canceled == false)
|
|
dt.Commit();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
#region CreateGridColumn
|
|
|
|
private GridColumn CreateGridColumn()
|
|
{
|
|
if (dh != null)
|
|
return (dh.CreateComponent(typeof(GridColumn)) as GridColumn);
|
|
|
|
return (null);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region ITypeDescriptorContext Members
|
|
|
|
public IContainer Container
|
|
{
|
|
get { return (Component.Site.Container); }
|
|
}
|
|
|
|
public object Instance
|
|
{
|
|
get { return (Component); }
|
|
}
|
|
|
|
public void OnComponentChanged()
|
|
{
|
|
object value = _SuperGrid.PrimaryGrid.Columns;
|
|
|
|
_ChangeService.OnComponentChanged(Component, _PropertyDescriptor, value, value);
|
|
}
|
|
|
|
public bool OnComponentChanging()
|
|
{
|
|
if (Component is SuperGridControl)
|
|
_ChangeService.OnComponentChanging(((SuperGridControl)Component).PrimaryGrid, _PropertyDescriptor);
|
|
else
|
|
_ChangeService.OnComponentChanging(Component, _PropertyDescriptor);
|
|
|
|
return true;
|
|
}
|
|
|
|
public PropertyDescriptor PropertyDescriptor
|
|
{
|
|
get { return (_PropertyDescriptor); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IWindowsFormsEditorService Members
|
|
|
|
public void CloseDropDown()
|
|
{
|
|
throw new Exception("The method or operation is not implemented.");
|
|
}
|
|
|
|
public void DropDownControl(Control control)
|
|
{
|
|
throw new Exception("The method or operation is not implemented.");
|
|
}
|
|
|
|
public DialogResult ShowDialog(Form dialog)
|
|
{
|
|
return (dialog.ShowDialog());
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IServiceProvider
|
|
|
|
object IServiceProvider.GetService(Type serviceType)
|
|
{
|
|
if (serviceType.Equals(typeof(IWindowsFormsEditorService)))
|
|
return (this);
|
|
|
|
return GetService(serviceType);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|