view pdf winform c# : Check links in pdf control software platform web page windows azure web browser TMS%20TAdvStringGrid%20Developers%20Guide10-part141

TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
101 | Page 
Returns the index of the parent row of any given row. If the row is not a child of a node, -1 is 
returned. 
procedure InsertChildRow(ARow: Integer); 
Inserts a new row within the span of a node 
procedure RemoveChildRow(ARow: Integer); 
Removes a child row from a node 
Everything starts by adding a node to a grid and this is done with the AddNode method. The first 
parameter is what we call the visible row position in the grid where you want to add a node. When 
working with hidden rows, there is a difference between visible row position and real row position 
which takes the hidden rows into account. (Whenever you wan to map the visible row position to a 
real row position, use the RealRowIndex method) The second parameter in the AddNode method is 
the span of the node, that is, the number of rows to expand or contract when clicking this node. If 
this span parameter is zero, the node will automatically expand or contract to the next found node 
in the grid.  
The RemoveNode and IsNode methods are simply doing what their names refer to. Also notice in this 
case, that the row refers to the visible row position! 
With these function, you can start adding simple row expand/contract functionality to your grid. In 
the example procedure below, nodes are inserted to allow expansion or contracting of equal cells in 
column 1: 
var 
i,j:integer; 
begin 
with advstringgrid1 do 
begin 
:= 1; 
:= 1; 
while (I < RowCount - 1) do 
begin 
while (Cells[1,J] = Cells[1,J + 1]) and (J < RowCount - 1) do 
Inc(j); 
if (I <> J) then  
AddNode(I,J – I + 1); 
:= J + 1; 
:= I; 
end; 
Row := 1;  
Col := 1; 
end; 
end; 
In order to programmatically expand or contract nodes, either the function GetNodeState, 
SetNodeState or ExpandNode and ContractNode are available. The difference is the used row 
mapping. GetNodeState and SetNodeState work with this visible row index, while ExpandNode and 
ContractNode work with the real row index. Often, you will want to maintain the exact real row 
position of the node to expand and use the ExpandNode or ContractNode method. This is because 
the visible row position can change all the time by user interaction, while the real row position is 
under program control: 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
AdvStringGrid1.ExpandNode(RealRow); 
Check links in pdf - insert, remove PDF links in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Free C# example code is offered for users to edit PDF document hyperlink (url), like inserting and deleting
adding hyperlinks to pdf files; add links pdf document
Check links in pdf - VB.NET PDF url edit library: insert, remove PDF links in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Help to Insert a Hyperlink to Specified PDF Document Page
adding a link to a pdf; add hyperlink to pdf acrobat
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
102 | Page 
end; 
procedure TForm1.Button4Click(Sender: TObject); 
begin 
AdvStringGrid1.ContractNode(RealRow); 
end; 
A second topic involved in using nodes, is the node appearance. Nodes always appear in the first 
column (index 0) and can be one of 4 types : cnflat, cn3D, cnglyph or cnXP. A flat node is simply a 
rectangle with the well known + / - sign in it. The 3D node type is a raised or sunken rectangle 
while you can also specify your own glyph for the expand or contract state. The appearance of the 
node is controlled through the CellNode property of TAdvStringGrid. You can speficy here the glyphs 
as well as the color of the flat and 3D node. 
Further properties of CellNode are: 
ShowTree: Boolean; when true, a tree connecting the nodes is drawn 
ShowTreeFull: Boolean; when true, a tree is draw horizontally till the right side of the cell 
TreeColor: TColor; sets the color of the tree lines. 
Multilevel nodes 
TAdvStringGrid supports multi level nodes. This is done by inserting nodes within the span of an 
existing (parent) node. It is required that the span of a child node is within the span of the parent 
node. If this is not the case, the multi-level node setup is incorrect and will not work properly. The 
above node scheme is obtained by following code: 
advstringgrid1.AutoNumberCol(1); 
advstringgrid1.AddNode(1,10);  // main node 
advstringgrid1.AddNode(3,2);   // child node 1 
advstringgrid1.AddNode(5,5);  // child node 2 
advstringgrid1.AddNode(6,2);  // child node of child node 2 
Last but not least, four event handlers give feedback on user node expansion or contraction through 
the OnExpandNode, OnContractNode and OnBeforeExpandNode and OnBeforeContractNode events. 
For the OnExpandNode, OnContractNode, two additional parameters come with this event handler: 
the visible row index of the node clicked as well as the real row index of this node:
procedure TForm1.AdvStringGrid1ExpandNode(Sender: TObject; ARow, 
ARowReal: Integer); 
begin 
ShowMessage(‘Expand : ' + IntToStr(ARow) + '-' + IntToStr(ARowReal)); 
end; 
C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
toolkit SDK, preserves all the original anchors, links, bookmarks and using RasterEdge.XDoc.PDF; program with an incorrect format", please check your configure
add hyperlink to pdf in preview; add links to pdf in acrobat
.NET PDF Document Viewing, Annotation, Conversion & Processing
Add, edit, delete links. Form Process. Online Demo See the PDF SDK for .NET in action and check how much they can do for you. See Pricing
adding hyperlinks to pdf; add a link to a pdf
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
103 | Page 
For the OnBeforeExpandNode and OnBeforeContractNode and additional parameter Allow by 
reference is available with which it can be dynamically controlled whether the node can 
contract/expand or not. 
TAdvStringGrid filtering 
Basic filtering 
With the filtering capabilities in TAdvStringGrid, showing only a filtered set of rows in the grid is 
easy. Two properties are used for filtering. First there is the FilterData property, which is a 
TCollection of filter conditions for each column and second is the property FilterActive through 
which filtering is performed when set true.  
Taking a closer look at the FilterData collection, this is a TCollection of elements with following 
properties: 
Column: Integer;  integer value, setting the column for which to apply the filter condition 
Condition: string; this is a string setting the filtering condition 
CaseSensitive: Boolean; sets whether the filter is case sensitive or not 
Data: TFilterCells: controls what specific cell data the filter should apply to (see below) 
Suffix: string; sets the suffix string to ignore for the filtering condition 
Prefix: string; sets the prefix string to ignore for the filtering condition 
Operation: TFilterOperation; sets the logical operation between multiple filters 
Method: TFilterMethod: when set to default value fmExpression, the condition is treated as an 
expression that can contain wildchars like *,?,!,>,<. When it is set to fmLiteral, a direct string 
comparison will be done between condition and cell content, i.e. a special symbol like ‘*’ will not 
be treated as wildchar. 
RemoveAccented: Boolean; when this is set to true, the filtering ignores accented characters. This 
means that when the filter condition is set to “eya” and RemoveAccented is true, it will accept 
values like “éyâ” or “ëyà” etc… 
The Condition property can contain a condition in following formats: 
substring filtering:  
S*, S? : * or ? denote multi or single character matches 
>, < , >=, =< : larger than, less than, larger or equal, less or equal (when data is numeric or a date, 
comparison take place based on numeric data or date based, otherwise on alphabetic comparisons) 
= , ! : equal or not equal 
& , ^ : logical AND , logical OR 
Thus, an expression : >20 & <30 is a valid filtering expression as well as !A* 
The filter can also detect dates, ie. It can use something like : >10/4/2003 & <10/5/2003 
Note: when the filter condition includes a space character or logical expression character, use 
quotes, for example, this filter condition filters on ‘C&A’ (and not C and A) by setting 
Condition := ‘”C&A”’; 
When the Prefix or Suffix property is set, this string is ignored as start or end string part of the cell 
to perform the match with. For example, if cells display a value as currency (ie. 150$), setting the 
Suffix to ‘$’ will allow to ignore the end ‘$’ character and enable to specify a numeric based filter 
condition (ie. >100) 
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
original text style (including font, size, color, links and boldness using RasterEdge.XDoc.PDF; a program with an incorrect format", please check your configure
add link to pdf acrobat; add hyperlink pdf file
C# PDF Page Replace Library: replace PDF pages in C#.net, ASP.NET
text, images, interactive elements, such as links and bookmarks using RasterEdge. XDoc.PDF; load a program with an incorrect format", please check your configure
add links to pdf; add hyperlinks pdf file
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
104 | Page 
By default, setting multiple filter conditions is a logical AND operation (the Operation property is by 
default foNone). For speed reasons, by default a short-circuit evaluation is done. When choosing 
another logical operation, an extensive evaluation is done applying the choosen operation between 
each successive filter.  
Example: 
To apply a filter on 2 columns where rows should be accepted when the condition for column A 
matches or the condition for column B matches, setup is: 
with Filter.Add do 
begin 
Condition := ConditionForA; 
Column := A; 
Operation := foAND; // perform AND with default True result 
end; 
with Filter.Add do 
begin 
Condition := ConditionForB; 
Column := B; 
Operation := foOR; // perform OR with previous filter 
end; 
To start the actual filtering, the property FilterActive is first set to False to disable all filtering. 
After this, the FilterDate collection is setup and then FilterActive is set to True to apply the filter. 
If the filter condition is set in the first row for each column, setting up and applying the filter 
becomes: 
var 
i:integer; 
begin 
with AdvStringGrid1 do 
begin 
FilterActive := False; 
Filter.Clear; // clearing any previous filter settings 
for I := FixedCols to ColCount - 1 do 
begin 
if (Cells[i,0]<>'') then  // add filter for column if filter present 
with Filter.Add do 
begin 
Condition := Cells[i,0]; 
Column := i; 
CaseSensitive := False; // filter is not case sensitive 
end; 
end; 
FilterActive := True;  // applying the filter 
end; 
end; 
By default, filtering is based on displayed cell text, ie. the value that was possible dynamically set 
with the event OnGetDisplText. That means that when virtual cells are used, the filtering will be 
based by default on the virtual cell text. To enable the filtering to happen for the actual cell data, 
set FilterData.Data to fcNormal. Other than virtual or normal cell text, it is also possible to specify: 
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
105 | Page 
fcStripHTML: filtering is based on displayed cell text but with HTML tags removed 
fcCalculated: this applies in first place to TadvSpreadGrid to enable filtering on formula itself or the 
formula result. 
fcRow: a row matches the filter when the string set in the condition is found in any of the cells of a 
row. 
This filter will show all rows where any of its columns contains the word “text”: 
with grid.Filter.Add do 
begin 
Condition := ‘text’; 
Data := fcRow; 
end; 
grid.FilterActive := true; 
Persisting filters 
The grid provides two methods that can be used to load & save the state of the filter to a file: 
grid.LoadFilter(Filename: string); 
grid.SaveFilter(FileName: string); 
Filter dropdown in column header 
To make filtering in the grid available from the UI, each column header can display a filter 
dropdown button from where a filter can be choosen. Upon selection of a filter from the dropdown, 
it is applied to the grid. The settings that control the display of the filter are grouped under 
grid.FilterDropDown. Following settings are available via the grid.FilterDropdown property: 
grid.FilterDropDown.AutoSize: Boolean 
When true, the size of the dropdown adapts to the text in the list 
grid.FilterDropDown.Color: TColor 
Sets the background color of the dropdown list 
grid.FilterDropDown.ColumnWidth: Boolean 
When true, the filter dropdown with is equal to the column width 
grid.FilterDropDown.Font: TFont 
Sets the font of the filter dropdown list 
grid.FilterDropDown.Glyph: TBitmap 
Sets the glyph displayed in the column header indicating a filter is available 
grid.FilterDropDown.Height: integer 
Sets the height of the dropdown list 
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
106 | Page 
grid.FilterDropDown.Width: integer 
Sets the width of the dropdown list 
Additional filter options: 
grid.FilterDropDownAuto: Boolean 
When true, the value list in the dropdown is automatically filled with the distinct column values. 
grid.FilterDropDownCheck: Boolean 
When true, the filter dropdown consists of a checklist. This allows to simultaneously select multiple 
filter conditions (multiple conditions are applied with an OR function) 
grid.FilterDropDownCheckUnCheckAll: Boolean 
When true, the option is added to the filter dropdown to immediately check or uncheck all items in 
the filter dropdown. 
grid.FilterDropDownClear: string 
Sets the text value to represent clearing the filtering in the dropdown. When this value is selected 
from the dropdown, the filtering is not longer active. 
grid.FilterDropDownColumns: TFilterDropDownColumns 
Selects whether the filter dropdown appears for all columns or only for normal columns (excluding 
fixed columns). Values are fdAll or fdNormal. 
grid.FilterDropDownRow: integer 
Sets the fixed row index where the filter dropdown should appear. This is by default the last fixed 
row. This property can be used when grid.FixedRows is larger than 1 and the filter dropdown can be 
set to another row than the last fixed row. 
grid.FilterNormalCellsOnly: Boolean 
When true, rows that have a node will not be filtered. 
The content of the filter dropdown list is set via the event grid.OnGetColumnFilter. This event 
passes a TStringList that can be filled with filter specifiers. Note that the filter specifiers can be 
friendly names. It is only from the OnFilterSelect event that the real filtercondition must be 
applied. The code snippet below shows how the filter is set for different columns in the grid:<br> 
procedure TForm2.AdvStringGrid1GetColumnFilter(Sender: TObject; Column: 
Integer; Filter: TStrings); 
begin 
case Column of 
1: 
begin 
Filter.Add('Clear'); 
Filter.Add('Within range'); 
Filter.Add('Exceptions'); 
end; 
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
107 | Page 
2: 
begin 
Filter.Add('Clear'); 
Filter.Add('>50'); 
Filter.Add('<50'); 
end; 
3: 
begin 
Filter.Add('Clear'); 
Filter.Add('>20'); 
Filter.Add('<20'); 
end; 
4: 
begin 
Filter.Add('Clear'); 
Filter.Add('>20'); 
Filter.Add('<20'); 
end; 
end; 
end
When a selection is made from the filter dropdown list, the event OnFilterSelect is triggered. This 
returns the column, the index of the filter and the friendlyname of the filter. Via the parameter 
FilterCondition, the real filter condition can be set. In the code shown here, the OnFilterSelect 
converts the filter friendlyname "Clear" to an empty filter condition and it also sets a filter 
condition for column 1 for friendly names "Within range" and "Exceptions". It also updates the 
column header to show the filter that is applied.  
procedure TForm2.AdvStringGrid1FilterSelect(Sender: TObject; Column, 
ItemIndex: Integer; FriendlyName: string; var FilterCondition: string); 
begin 
if FilterCondition = 'Clear' then 
FilterCondition := ''; 
if (Column = 1) then 
begin 
case ItemIndex of 
1: FilterCondition := '>20 & <80'; 
2: FilterCondition := '<20 | >80'; 
end; 
end; 
AdvStringgrid1.Cells[Column, 0] := FriendlyName; 
end
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
108 | Page 
By default, the filter is displayed in the first fixed row of the grid. If the grid has multiple fixed 
rows, it possible to control on what fixed row the filter dropdown is displayed with the property 
grid.FilterDropDownRow. 
When the option is chosen to have a filter dropdown with checkboxes, the event OnFilterCheck is 
triggered when a checkbox in the filter dropdown is clicked. 
Auto filters 
The grid has a built-in capability to automatically create the filter consisting of an alphabetically 
sorted list of unique column values. To enable this feature, set grid.FilterDropDownAuto to true. In 
addition to the list of unique values, an entry is optionally added that can be used to clear the 
filter. The value of this entry is set by grid.FilterDropDownClear: string and defaults to ‘(All)’. When 
the auto filter capability is enabled, every column header automatically gets the filter dropdown 
icon. When the auto filter is only needed for some specific columns, the OnGetColumnFilter event 
can be used to remove the filter by simply clearing the prefilled filter list. This sample code shows 
how the auto filter can be set to only columns 1 and 2: 
procedure TForm13.AdvStringGrid1GetColumnFilter(Sender: TObject; 
Column: Integer; Filter: TStrings); 
begin 
if not (Column in [1,2])  then 
Filter.Clear; 
end; 
Incremental filters 
Incrementally applying filters can be done by calling grid.ApplyFilter several times after each other. 
To remove the last filter or to remove all filters call grid.RemoveLastFilter or grid.RemoveAllFilters 
respectively. In the code snippet below, two filters are applied after each other and finally the last 
filter operation is removed, leaving the result of the first applied filter: 
procedure TForm2.Button1Click(Sender: TObject); 
begin 
with advstringgrid1.Filter.Add do 
begin 
condition := '>50'; 
column := 1; 
end; 
advstringgrid1.ApplyFilter; 
with advstringgrid1.Filter.Add do 
begin 
condition := '<75'; 
column := 1; 
end; 
advstringgrid1.ApplyFilter; 
advstringgrid1.RemoveLastFilter; 
end; 
Narrow down filtering 
Another filtering the Narrow-Down capability. With this method, the grid can filter in incremental 
steps to find all rows with a specific word or all rows that have a specific word in one column. In the 
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
109 | Page 
demo, the edit control's OnChange method event handler just calls grid.NarrowDown(searchvalue). 
This causes that the grid will always show all rows containing the word in the edit control as the 
user types the search specification in the edit control. The checkbox controls whether the search 
for a word in a row is done for the full row or restricted to one column only (column 1 in this case): 
procedure TForm1.Edit1Change(Sender: TObject); 
begin 
if Checkbox1.Checked then 
AdvStringGrid1.NarrowDown(Edit1.Text, 1) 
else 
AdvStringGrid1.NarrowDown(Edit1.Text); 
end
Overloads for NarrowDown: 
procedure NarrowDown(AConditionstringAColumninteger = -1);  
procedure NarrowDown(AConditionstringDoRemoveAccentedboolean
AColumninteger = -1);  
The second overload has an extra parameter: DoRemoveAccented. When this is set to true, this 
means that accented characters will be ignored, i.e. treated as non accented character in the filter 
condition. 
Example: When performing a narrowdown on “eya”, it will accept rows with values “éyä” or “ëyà” 
etc… 
Filter edit 
Another method to perform filtering via the UI of the grid is by activating filter editing. This is 
basically an extra row or fixed row where the filter values can be set and edited and the filter 
method can be selected via a context menu. 
To activate filter editing, set grid.FilterEdit.Enabled = true. By default, the fixed row becomes 
TMS SOFTWARE  
TADVSTRINGGRID  
DEVELOPERS GUIDE 
110 | Page 
editable and an icon appears left in each column header cell from where a click selects the filter 
method. 
The grid.FilterEdit class property exposes: 
Color: TColor  : Sets the background color of the editable filter condition cells 
Columns: TFilterDropDownColumns : Specifies for what columns the filter edit should appear. This  
can be for all columns (fdAll) or for non-fixed columns only (fdNormal) 
Enabled: Boolean : When true, the filter bar with edit filters appears 
Row: integer: Selects the fixed row where the filter bar appears. By default this is the first fixed 
row. 
The filter types that can be selected from the context menu are: 
- text in cell starts with value of filter condition 
- text in cell ends with value of filter condition 
- text in cell contains value of filter condition 
- text in cell does not contain value of filter condition 
- text in cell is equal to value of filter condition 
- text in cell is not equal to value of filter condition 
By defaulf, the filter edit appears for each column. To override this and exclude a specific column 
for filter editing, the event OnHasFilterEdit can be used. 
Documents you may be interested
Documents you may be interested