public List<Country> Countries = new(); ... this.Countries.Add( new Country( "Czech", Country.ContinentEnum.EUROPE, 10 ) ); this.Countries.Add( new Country( "Poland", Country.ContinentEnum.EUROPE, 40 ) ); this.Countries.Add( new Country( "China", Country.ContinentEnum.ASIA, 1100 ) ); this.Countries.Add( new Country( "USA", Country.ContinentEnum.AMERICA, 340 ) ); ... int total = this.Countries.Aggregate( 0, (total,b) => total + b.Population ); MessageBox.Show( total.ToString() ); // -> 1490
Code Example Center
Microsoft AX 2012, X++, C#, SQL server, SSRS, Java, JavaFX, Oracle, PL/SQL, Delphi - codes examples, step-by-step tutorials, experiences.
Tuesday, January 16, 2024
c# - How to use LINQ aggregate() function
This calling performs SUM on Population (with starting value = 0.)
Thursday, November 30, 2023
c# - How to call custom event
1) Custom event without parameters:
public Action OnBeforeEvaluationEvent; ... if ( OnBeforeEvaluationEvent != null ) OnBeforeEvaluationEvent();2) Custom event with parameter(s):
public delegate void OnAfterEvaluatingDelegate( CodeConditionGroup _conditionGroup ); public event OnAfterEvaluatingDelegate OnAfterEvaluationgEvent; if ( OnAfterEvaluationgEvent != null ) OnAfterEvaluationgEvent( condition );
Friday, November 24, 2023
c#, devexpress - How to make master-detail relation on non-DB objects (List generic )
List<TmpParent> list = new List<TmpParent>(); List<TmpChild> listChildExternal = new List<TmpChild>();Initial data filling:
var p = new TmpParent( "A", "A", true ); p.listInner.Add( new TmpChild() ); list.Add( p ); list.Add( new TmpParent( "B", "B", false, TypeEnum.OPERATOR ) ); list.Add( new TmpParent( "C", "C", true ) ); list.Add( new TmpParent( "D", "D", false ) ); listChildExternal.Add( new TmpChild() { str1="C", str2 = "child1" } ); listChildExternal.Add( new TmpChild() { str1="C", str2 = "child1.1" } ); listChildExternal.Add( new TmpChild() { str1="B", str2 = "child1.2" } ); gridParent.DataSource = list; // masterFind and show detail data:
- First detail list for inner list.
- Second detail list for external list connected with relation.
private void gridViewParent_FocusedRowChanged( object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e ) { if ( e.FocusedRowHandle >= 0 ) { TmpParent master = gridView1.GetRow( e.FocusedRowHandle ) as TmpParent; if ( master != null ) { /* A] try to find in inner list */ gridDetail.DataSource = master.listInner; /* B] try to find in external list */ gridChildExternal.DataSource = listChildExternal.Where( x => x.str1 == master.str1 ).ToList(); } } }First grid=master, second grid=detail internal list, third grid=detail external list.
Tuesday, November 14, 2023
c#, devexpress - How to use attributes in GridControl (devexpress)
The attributes in the class can be used as metadata for generated GridControl (devexpress) columns.
Class for rows:
public enum TypeEnum { [Display(Name = "Type is expression.")] EXPRESSION = 0, [Display(Name = "Type is operator.")] OPERATOR = 1 } public class TmpParent { [Display( ShortName = "Company", Name = "Company Name", Description = "The amount of currently available product", AutoGenerateFilter = false) ] public string str1 { get; set; } [DataType(DataType.Text), StringLength(20, MinimumLength = 3)] public string str2 { get; set; } public bool bool1 { get; set; } public TypeEnum enum1 { get; set; } [DisplayFormat(DataFormatString = "MMMM/yyyy")] public DateTime date1 { get; set; } [DisplayFormat(DataFormatString = "p", ApplyFormatInEditMode = true)] public float value1 { get; set; } [DataType(DataType.Currency), Range(200, 5000), Required] public float value2 { get; set; } public TmpParent( string _s1, string _s2, bool _b, TypeEnum _enum = TypeEnum.EXPRESSION ) { str1 = _s1; str2 = _s2; bool1 = _b; enum1 = _enum; date1 = DateTime.Now; value1 = 100.1f; value2 = 300.5f; } }Grid fillings:
var p = new TmpParent( "A", "A", true ); list.Add( p ); list.Add( new TmpParent( "B", "B", false, TypeEnum.OPERATOR ) ); list.Add( new TmpParent( "C", "C", true ) ); list.Add( new TmpParent( "D", "D", false ) ); gridParent.DataSource = list;Output:
Monday, October 23, 2023
delphi - How to work with generic TArray
Using generic TArray with String type.
procedure TFDrawingRelease.doReading; var f : TextFile; sRow : string; aSplitted: TArray<string>; begin { -- delete all rows } if QData.Active then begin QData.Close; QData.Open; end; { -- open file and read data (two columns divided by ";") } AssignFile( f, EFileName.Text ); try Screen.Cursor := crHourGlass; QData.DisableControls; reset( f ); while not eof( f ) do begin readln( f, sRow ); aSplitted := sRow.Split( [';'], 2 ); QData.Insert; { ..and return to first char _ } QDataItemid.AsString := aSplitted[0].Split( [ '_' ], 1 )[0]; QDataName.AsString := aSplitted[1]; QData.Post; end; finally closeFile( f ); QData.EnableControls; Screen.Cursor := crDefault; end; SetButtons; end;
Wednesday, September 6, 2023
ax - How to call new form and modify its grid filter
Args args; FormRun formRun; Query query; My_VM_Resources table; FormDataSource formDataSource = new FormDataSource(); super(); // call the new form args = new Args(); formRun = new menufunction( menuItemDisplayStr( WrkCtrCapRes ), MenuItemType::Display ).create( args ); formRun.init(); formDataSource = formRun.dataSource(); formRun.run(); table = My_VM_Resources_ds.cursor(); formDataSource.filter( fieldNum(WrkCtrCapRes, WrkCtrId), /*"5210*"*/table.my_resource_mask ); formRun.detach(); formRun.wait();
Wednesday, August 30, 2023
Wednesday, July 12, 2023
c# - LINQ max() and empty list - how to solve
int iMaxLevel = this.Items.Any() ? this.Items.Max( x => x.Level ) : 0;
Monday, May 22, 2023
oracle - How to alter sequence next number
DROP SEQUENCE MENU_SEQ;
create sequence MENU_SEQ
minvalue 1
maxvalue 999999999999999999999
start with 18456
increment by 1
cache 20;
Friday, April 21, 2023
ax - How to find plan version by name
if ( this.RefType == WrkCtrCapRefType::PlannedOrder ) {
reqPO = ReqPO::find(
ReqPlanVersion::findReqPlanId( "MAIN", "company", NoYes::Yes, false ).RecId,
this.refId, false );
if ( reqPO ) return reqPO.ItemId;
}
Friday, April 14, 2023
c# - How to solve problem on TEST project with error on referenced project
The problem with the referenced project error can be solved with this change:
Thursday, February 16, 2023
Monday, January 30, 2023
c# - How to save List into text file
public ListCodeLogOnlyList = new(); ... await System.IO.File.WriteAllLinesAsync( _filename, this.CodeLogOnlyList );
Friday, January 20, 2023
c# - How to access to parent form (for form)
itemWebLink.Web.KeyDown += ((FMain)this.ParentForm).Web_KeyDown;
c# - How applicate LINQ WHERE and FOREACH
this.ConditionGroups.Where( x => x.Active == true ).ToList().ForEach( condition => { ... } );
Wednesday, January 11, 2023
sql server - How to call exec proc and show its result
declare @i int; exec @i = users_exists 'worker01'; print @i;Output:
0
Thursday, November 17, 2022
sql server - How to count only rows where are non-zero value
In SELECT use this construction with CASE statement:
... count(*) as rowscount, sum( case a.costamount when 0 then 0 else 1 end ) as rowscount_nonzero
Thursday, October 20, 2022
Friday, July 22, 2022
c# - How convert string array into one string
If you use this code on string array:
string[] args = Environment.GetCommandLineArgs(); Console.Write( args.ToString() );you will get:
System.String[]But better way in this case is to use string.Join() function (where you can set used delimiter):
string[] args = Environment.GetCommandLineArgs();
Console.Write( string.Join( ",", args ) );
Then:
C:\app.dll,layoutdir=C:/app/bin
Friday, June 24, 2022
c# - How get important system informations
Sometimes you need for example width of the standard scrollbar. For getting it you can use SystemInformation class (WinForms).
Here is a list of supported properties and their values.
Type t = typeof( System.Windows.Forms.SystemInformation ); PropertyInfo[] property = t.GetProperties(); for( int i = 0; i < property.Length; i++ ) richTextBox1.Text += property[ i ].Name + " = " + property[ i ].GetValue( null, null ).ToString() + "\n";Output:
DragFullWindows = True HighContrast = False MouseWheelScrollLines = 3 PrimaryMonitorSize = {Width=1920, Height=1080} VerticalScrollBarWidth = 17 HorizontalScrollBarHeight = 17 CaptionHeight = 23 BorderSize = {Width=1, Height=1} FixedFrameBorderSize = {Width=3, Height=3} VerticalScrollBarThumbHeight = 17 HorizontalScrollBarThumbWidth = 17 IconSize = {Width=32, Height=32} CursorSize = {Width=32, Height=32} MenuFont = [Font: Name=Segoe UI, Size=12, Units=0, GdiCharSet=1, GdiVerticalFont=False] MenuHeight = 20 PowerStatus = System.Windows.Forms.PowerStatus WorkingArea = {X=0,Y=0,Width=1920,Height=1080} KanjiWindowHeight = 0 MousePresent = True VerticalScrollBarArrowHeight = 17 HorizontalScrollBarArrowWidth = 17 DebugOS = False MouseButtonsSwapped = False MinimumWindowSize = {Width=136, Height=39} CaptionButtonSize = {Width=36, Height=22} FrameBorderSize = {Width=4, Height=4} MinWindowTrackSize = {Width=136, Height=39} DoubleClickSize = {Width=4, Height=4} DoubleClickTime = 500 IconSpacingSize = {Width=75, Height=75} RightAlignedMenus = False PenWindows = False DbcsEnabled = False MouseButtons = 8 Secure = False Border3DSize = {Width=2, Height=2} MinimizedWindowSpacingSize = {Width=160, Height=28} SmallIconSize = {Width=16, Height=16} ToolWindowCaptionHeight = 23 ToolWindowCaptionButtonSize = {Width=22, Height=22} MenuButtonSize = {Width=19, Height=19} ArrangeStartingPosition = Hide ArrangeDirection = Left MinimizedWindowSize = {Width=160, Height=28} MaxWindowTrackSize = {Width=1940, Height=1100} PrimaryMonitorMaximizedWindowSize = {Width=1936, Height=1096} Network = True TerminalServerSession = False BootMode = Normal DragSize = {Width=4, Height=4} ShowSounds = False MenuCheckSize = {Width=15, Height=15} MidEastEnabled = False NativeMouseWheelSupport = True MouseWheelPresent = True VirtualScreen = {X=0,Y=0,Width=1920,Height=1080} MonitorCount = 1 MonitorsSameDisplayFormat = True ComputerName = WZ1G89XBX UserDomainName = LYZ UserInteractive = True UserName = pirklj IsDropShadowEnabled = True IsFlatMenuEnabled = True IsFontSmoothingEnabled = True FontSmoothingContrast = 1200 FontSmoothingType = 2 IconHorizontalSpacing = 75 IconVerticalSpacing = 75 IsIconTitleWrappingEnabled = True MenuAccessKeysUnderlined = False KeyboardDelay = 1 IsKeyboardPreferred = False KeyboardSpeed = 31 MouseHoverSize = {Width=4, Height=4} MouseHoverTime = 400 MouseSpeed = 10 IsSnapToDefaultEnabled = False PopupMenuAlignment = Right IsMenuFadeEnabled = True MenuShowDelay = 400 IsComboBoxAnimationEnabled = True IsTitleBarGradientEnabled = True IsHotTrackingEnabled = True IsListBoxSmoothScrollingEnabled = True IsMenuAnimationEnabled = True IsSelectionFadeEnabled = True IsToolTipAnimationEnabled = True UIEffectsEnabled = True IsActiveWindowTrackingEnabled = False ActiveWindowTrackingDelay = 0 IsMinimizeRestoreAnimationEnabled = False BorderMultiplierFactor = 1 CaretBlinkTime = 530 CaretWidth = 1 MouseWheelScrollDelta = 120 VerticalFocusThickness = 1 HorizontalFocusThickness = 1 VerticalResizeBorderThickness = 4 HorizontalResizeBorderThickness = 4 ScreenOrientation = Angle0 SizingBorderWidth = 1 SmallCaptionButtonSize = {Width=22, Height=22} MenuBarButtonSize = {Width=19, Height=19}
Thursday, June 9, 2022
c# - How to format interpolated strings
This example writes double value with two decimal places.
double zoom = this.ZoomFactor * 100.0; LStatusZoom.Text = $"Zoom: {zoom:0.##} %";Output:
Zoom: 80.25 %
Monday, June 6, 2022
win os - How to copy all files defined by mask in all subdirectories into one directory
Copy all *.mobi files in current directory and all subdirectories into c:\temp\mobi directory.
The destination directory must exists.
UPDATE: Better variant:
find . -name \*.mobi -exec cp {} c:/temp/mobi/ \;
for /r %i in (*.epub) do xcopy /Y "%i" c:\temp\mobi
Tuesday, May 10, 2022
c# - How to make DOWN button (in group of buttons)
The goal: Only one button from group can be down.
Every button link through Click event to this method:
private void downclick( object sender, EventArgs e ) { Button b = (Button)sender; /* if is down -> do nothing */ if ( b.BackColor == Color.IndianRed ) return; /* set as down */ b.BackColor = Color.IndianRed; /* deselect others */ b.Parent.Controls .Cast<Control>() .Where( x => x is Button ) .Cast<Button>() .Where( x => x != b ) .ToList() .ForEach( x => x.BackColor = Color.WhiteSmoke ); }So - pushed button = Color.IndianRed. If you want to know which button is down pushed:
/* get down button */
Button b = groupBox1.Controls
.Cast<Control>()
.Where( x => x is Button )
.Cast<Button>()
.Where( x => x.BackColor == Color.IndianRed )
.ToList()
.FirstOrDefault();
MessageBox.Show( b.Text );
}
Tuesday, April 19, 2022
c# - How to create instance with string class name
String variable sClass contains for example Box.LayoutItem string. ParentObject and ParentID are optional constructor parameters.
var p = Activator.CreateInstance( Type.GetType( sClass ), parentObject, parentID );
LayoutItem p1 = (LayoutItem)p;
p1.Load( x );
Tuesday, March 29, 2022
c# - How to solve error "Sequence contains no elements" by Max() LINQ
This error occurs when the list is empty - no items are suitable for conditions.
int xCalc = _layoutManager.Items
.Where( x=> x.ParentObject == this.ParentObject )
.Where( x=> x.LayoutRelativePosition == LayoutRelativePositionEnum.RIGHT )
.Where( x=> x.IDOrder < this.IDOrder )
.Max( x=> x.xCalc + x.heightCalc );
Above Max() version returns in that situation (no items) error "Sequence contains no elements".
For solution you can use this format of the Max() function:
int xCalc = _layoutManager.Items .Where( x=> x.ParentObject == this.ParentObject ) .Where( x=> x.LayoutRelativePosition == LayoutRelativePositionEnum.RIGHT ) .Where( x=> x.IDOrder < this.IDOrder ) .Select(x => x.xCalc + x.heightCalc ) .DefaultIfEmpty() .Max();
Subscribe to:
Posts (Atom)