Kbase P142593: How to overlay UltraWinGrid:UltraCombo with a value of another cell?
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  09/03/2009 |
|
Status: Unverified
GOAL:
How to overlay UltraWinGrid:UltraCombo with a value of another cell?
GOAL:
How to display States and Cities in a UltraGrid's combo boxes?
FACT(s) (Environment):
OpenEdge 10.2A
Windows
FIX:
/*------------------------------------------------------------------------
File : myForm
Purpose : Demonstrate how to load a list of States and Cities in a UltraGrid Control
Syntax :
Description :
Author(s) :
Created :
Notes :
----------------------------------------------------------------------*/
USING Progress.Lang.*.
USING Progress.Windows.Form.
USING Infragistics.Win.*.
CLASS myForm INHERITS Form :
DEFINE PRIVATE VARIABLE components AS System.ComponentModel.IContainer.
DEFINE PRIVATE VARIABLE ultraGrid1 AS Infragistics.Win.UltraWinGrid.UltraGrid NO-UNDO.
DEFINE PRIVATE VARIABLE bindingSource1 AS Progress.Data.BindingSource NO-UNDO.
DEFINE TEMP-TABLE dt
FIELD State AS CHAR
FIELD City AS CHAR
INDEX idx1 IS PRIMARY UNIQUE
State City.
DEFINE DATASET dsDT FOR dt.
CONSTRUCTOR PUBLIC myForm ( ):
SUPER().
InitializeComponent().
InitializeUltraGrid().
CATCH e AS Progress.Lang.Error:
UNDO, THROW e.
END CATCH.
END CONSTRUCTOR.
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
METHOD PUBLIC VOID InitializeUltraGrid( ):
DEFINE VARIABLE vi AS INTEGER NO-UNDO.
REPEAT vi = 1 TO 5 :
CREATE dt.
ASSIGN dt.State = "S" + STRING( vi )
dt.City = "S" + STRING( vi ) + "C" + STRING( vi )
.
END.
bindingSource1 = NEW Progress.Data.BindingSource( DATASET dsDT:HANDLE ).
THIS-OBJECT:ultraGrid1:DataSource = bindingSource1.
RETURN.
END METHOD.
METHOD PRIVATE VOID InitializeComponent( ):
/* NOTE: The following method is generated by the OpenEdge Advanced GUI Visual Designer.
We strongly suggest that the contents of this method o.nly be modified using the
Visual Designer to avoid any incompatible modifications.
Modifying the contents of this method using a code editor will invalidate any support for this file. */
@VisualDesigner.FormMember (NeedsInitialize="true").
DEFINE VARIABLE ultraGridBand1 AS Infragistics.Win.UltraWinGrid.UltraGridBand NO-UNDO.
ultraGridBand1 = NEW Infragistics.Win.UltraWinGrid.UltraGridBand("dt", -1).
@VisualDesigner.FormMember (NeedsInitialize="true").
DEFINE VARIABLE ultraGridColumn1 AS Infragistics.Win.UltraWinGrid.UltraGridColumn NO-UNDO.
ultraGridColumn1 = NEW Infragistics.Win.UltraWinGrid.UltraGridColumn("State").
@VisualDesigner.FormMember (NeedsInitialize="true").
DEFINE VARIABLE ultraGridColumn2 AS Infragistics.Win.UltraWinGrid.UltraGridColumn NO-UNDO.
ultraGridColumn2 = NEW Infragistics.Win.UltraWinGrid.UltraGridColumn("City").
@VisualDesigner.FormMember (NeedsInitialize="true").
DEFINE VARIABLE tableDesc1 AS Progress.Data.TableDesc NO-UNDO.
tableDesc1 = NEW Progress.Data.TableDesc("dt").
THIS-OBJECT:ultraGrid1 = NEW Infragistics.Win.UltraWinGrid.UltraGrid().
THIS-OBJECT:bindingSource1 = NEW Progress.Data.BindingSource().
CAST(THIS-OBJECT:ultraGrid1, System.ComponentModel.ISupportInitialize):BeginInit().
CAST(THIS-OBJECT:bindingSource1, System.ComponentModel.ISupportInitialize):BeginInit().
THIS-OBJECT:SuspendLayout().
/* */
/* ultraGrid1 */
/* */
THIS-OBJECT:ultraGrid1:DataSource = THIS-OBJECT:bindingSource1.
ultraGridColumn1:Header:VisiblePosition = 0.
ultraGridColumn2:Header:VisiblePosition = 1.
@VisualDesigner.FormMember (NeedsInitialize="false", InitializeArray="true").
DEFINE VARIABLE arrayvar0 AS System.Object EXTENT 2 NO-UNDO.
arrayvar0[1] = ultraGridColumn1.
arrayvar0[2] = ultraGridColumn2.
ultraGridBand1:Columns:AddRange(arrayvar0).
THIS-OBJECT:ultraGrid1:DisplayLayout:BandsSerializer:Add(ultraGridBand1).
THIS-OBJECT:ultraGrid1:Location = NEW System.Drawing.Point(13, 13).
THIS-OBJECT:ultraGrid1:Name = "ultraGrid1".
THIS-OBJECT:ultraGrid1:Size = NEW System.Drawing.Size(521, 274).
THIS-OBJECT:ultraGrid1:TabIndex = 0.
THIS-OBJECT:ultraGrid1:Text = "ultraGrid1".
THIS-OBJECT:ultraGrid1:InitializeLayout:SUBSCRIBE(THIS-OBJECT:ultraGrid1_InitializeLayout).
. THIS-OBJECT:ultraGrid1:InitializeRow:SUBSCRIBE(THIS-OBJECT:ultraGrid1_InitializeRow).
THIS-OBJECT:ultraGrid1:CellChange:SUBSCRIBE(THIS-OBJECT:ultraGrid1_CellChange).
/* */
/* bindingSource1 */
/* */
THIS-OBJECT:bindingSource1:MaxDataGuess = 0.
tableDesc1:ChildTables = ?.
@VisualDesigner.FormMember (NeedsInitialize="false", InitializeArray="true").
DEFINE VARIABLE arrayvar1 AS Progress.Data.ColumnPropDesc EXTENT 2 NO-UNDO.
arrayvar1[1] = NEW Progress.Data.ColumnPropDesc("State", "Field1", Progress.Data.DataType:CHARACTER).
arrayvar1[2] = NEW Progress.Data.ColumnPropDesc("City", "Field2", Progress.Data.DataType:CHARACTER).
tableDesc1:Columns = arrayvar1.
THIS-OBJECT:bindingSource1:TableSchema = tableDesc1.
/* */
/* myForm */
/* */
THIS-OBJECT:ClientSize = NEW System.Drawing.Size(546, 349).
THIS-OBJECT:Controls:Add(THIS-OBJECT:ultraGrid1).
THIS-OBJECT:Name = "myForm".
THIS-OBJECT:Text = "myForm".
CAST(THIS-OBJECT:ultraGrid1, System.ComponentModel.ISupportInitialize):EndInit().
CAST(THIS-OBJECT:bindingSource1, System.ComponentModel.ISupportInitialize):EndInit().
THIS-OBJECT:ResumeLayout(FALSE).
CATCH e AS Progress.Lang.Error:
UNDO, THROW e.
END CATCH.
END METHOD.
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
@VisualDesigner.
METHOD PRIVATE VOID ultraGrid1_CellChange( INPUT sender AS System.Object, INPUT e AS Infragistics.Win.UltraWinGrid.CellEventArgs ):
DEFINE VARIABLE cities AS ValueList NO-UNDO.
DEFINE VARIABLE cityIndex AS INTEGER NO-UNDO.
IF e:Cell:Column:Key = "State"
OR e:Cell:Column:Key = "City"
THEN DO:
cities = THIS-OBJECT:GetCityValueListForState(e:Cell:Row:Cells["State"]:Text).
cityIndex = cities:FindStringExact(e:Cell:Row:Cells["City"]:Te.xt).
IF cityIndex >= 0 THEN
e:Cell:Row:Cells["City"]:Appearance:ResetForeColor().
ELSE
e:Cell:Row:Cells["City"]:Appearance:ForeColor = System.Drawing.Color:Red.
./ e:Cell:Row:Cells["City"]:Value = cities:ValueListItems[0]:ToString().
END.
RETURN.
END METHOD.
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
@VisualDesigner.
METHOD PRIVATE VOID ultraGrid1_InitializeLayout( INPUT sender AS System.Object, INPUT e AS Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs ):
e:Layout:Bands[0]:Columns["State"]:Style = Infragistics.Win.UltraWinGrid.ColumnStyle:DropDownList.
e:Layout:Bands[0]:Columns["City"]:Style = Infragistics.Win.UltraWinGrid.ColumnStyle:DropDownList.
e:Layout:Bands[0]:Columns["State"]:ValueList = GetStatesValueList().
RETURN.
END METHOD.
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
METHOD PUBLIC ValueList GetStatesValueList( ):
DEFINE VARIABLE lst AS ValueList NO-UNDO.
DEFINE VARIABLE clst AS ValueList NO-UNDO.
DEFINE VARIABLE state AS ValueListItem NO-UNDO.
DEFINE VARIABLE vi AS INT NO-UNDO.
DEFINE VARIABLE vj AS INTEGER NO-UNDO.
lst = NEW ValueList().
REPEAT vi = 1 TO 10:
state = lst:ValueListItems:Add( "S" + String( vi)).
clst = NEW ValueList().
REPEAT vj = 1 TO 5:
clst:ValueListItems:Add( "S" + STRING(vi) + "C" + STRING( vj) ).
END.
state:Tag = clst.
. END.
RETURN lst.
END METHOD.
METHOD PUBLIC ValueList GetCityValueListForState( state AS CHAR):
DEFINE VARIABLE statesValueList AS ValueList NO-UNDO.
DEFINE VARIABLE vi AS INTEGER NO-UNDO.
statesValueList = THIS-OBJECT:GetStatesValueList().
vi = statesValueList:FindStringExact( state).
IF vi >= 0 THEN
RETURN CAST( statesValueList:ValueListItems[vi]:Tag, ValueList ).
ELSE
MESSAGE "No cities for " state VIEW-AS ALERT-BOX.
RETURN ?.
END METHOD.
/*------------------------------------------------------------------------------
Purpose:
Notes:
------------------------------------------------------------------------------*/
@VisualDesigner.
METHOD PRIVATE VOID ultraGrid1_InitializeRow( INPUT sender AS System.Object, INPUT e AS Infragistics.Win.UltraWinGrid.InitializeRowEventArgs ):
DEFINE VARIABLE state AS CHAR NO-UNDO.
state = e:Row:Cells["State"]:Value:ToString().
e:Row:Cells["City"]:ValueList = GetCityValueListForState(state).
RETURN.
END METHOD.
DESTRUCTOR PUBLIC myForm ( ):
IF VALID-OBJECT(components) THEN DO:
CAST(components, System.IDisposable):Dispose().
END.
END DESTRUCTOR.
END CLASS..