Expand group(s) from ListChanged event
Hello,
I''ve been struggling with creating an algorithm for the following problem for a few hours now, I hope you can help.
It appears to be simple. I am listening to the ListChanged event of the DataView providing the data for my GridGrouping control linkMonitorGrid, and if the [Status] field has a certain condition (values 0 or 1), I want to expand the group in which that child resides.
At first I thought about using the NewIndex property and passing this to my own method, CheckForPossibleGridExpands:
private void OnLinkViewChanged ( object sender, ListChangedEventArgs e )
{
// if it''s an addition or an update
if ( e.ListChangedType == ListChangedType.ItemAdded
|| e.ListChangedType == ListChangedType.ItemChanged )
{
CheckForPossibleGridExpands( e.NewIndex );
}
else if ( e.ListChangedType == ListChangedType.Reset )
{
CheckForPossibleGridExpands();
}
}
private void CheckForPossibleGridExpands(int rowIndex)
{
int status = Convert.ToInt16(this.linkMonitorGridView.Table.Rows[rowIndex]["Status"]);
// compare the new status with the one currently stored in the grid
if ( status == 0 || status == 1 )
{
// fetch the primary key MarketID
string marketId = this.linkMonitorGridView.Table.Rows[rowIndex]["MarketID"];
Syncfusion.Grouping.Table table = this.linkMonitorGrid.TableModel.Table;
Syncfusion.Grouping.ElementsInTableCollection elements = table.Elements;
//table.FilteredRecords
RecordFilterDescriptor rfd = new RecordFilterDescriptor("MarketID", new Syncfusion.Grouping.FilterCondition(FilterCompareOperator.Equals, marketId) );
RecordFilterDescriptorCollection rfdc = new RecordFilterDescriptorCollection();
rfdc.Add(rfd);
// expand the grid group
table.ExpandAllGroups();
}
}
and overloading this method with one which iterates through the linkMonitorGridView.Table.Rows when I recieve a ListChangedType.Reset, but i am not thinking that I should perhaps apply a filter to the this.linkMonitorGrid.TableModel.Table? Is that the right approach??
Also am I correct that linkMonitorGrid.TableModel.Table.ExpandAllGroups() will expand the group one I have located the record in the table, or do I need to be traversing some actual grid properties to correctly use ExpandAllGroups()???
Thanks in advance for your assistance.
Jason Southgate.
SIGN IN To post a reply.
3 Replies
AD
Administrator
Syncfusion Team
October 21, 2004 07:04 AM UTC
Hi Jason,
applying a filter is not a good approach. It will modify the collection of available records for the table (Table.FilteredRecords).
But you can use the UnsortedRecords collection and look up a record based on its source index. See below.
private void OnLinkViewChanged ( object sender, ListChangedEventArgs e )
{
// if it''''s an addition or an update
if ( e.ListChangedType == ListChangedType.ItemAdded
|| e.ListChangedType == ListChangedType.ItemChanged )
{
Record r = this.linkMonitorGrid.Table.UnsortedRecords[e.NewIndex];
// and then either
r.ParentTable.ShowRecord(r, true);
// or
r.ParentGroup.IsExpanded = true;
}
else if ( e.ListChangedType == ListChangedType.Reset )
{
this.linkMonitorGrid.Table.ExpandAllGroups();
}
}
FYI - In the next version there will also be a PrimaryKeySortedRecords collection that you can then also use to quickly look up a record based on a primary key,
e.g.
Record r = this.linkMonitorGrid.Table.PrimaryKeySortedRecords[primaryKeyValue];
Stefan
JS
Jason Southgate
October 21, 2004 07:56 AM UTC
Perfect Stefan,
I did this, in the end and overloaded the method too to cover ListChangedType.Reset:
private void OnLinkViewChanged ( object sender, ListChangedEventArgs e )
{
// refresh the grid summaries
this.linkMonitorGrid.Table.SummariesDirty = true;
this.linkMonitorGrid.Refresh();
// if it''s an addition or an update
if ( e.ListChangedType == ListChangedType.ItemAdded || e.ListChangedType == ListChangedType.ItemChanged )
{
CheckForPossibleGridExpands( e.NewIndex );
}
else if ( e.ListChangedType == ListChangedType.Reset )
{
CheckForPossibleGridExpands();
}
}
private void CheckForPossibleGridExpands( int rowIndex )
{
int status = Convert.ToInt16( this.linkMonitorGridView.Table.Rows[rowIndex]["Status"] );
// compare the new status with the one currently stored in the grid
if ( status == 0 || status == 1 )
{
Record r = this.linkMonitorGrid.Table.UnsortedRecords[rowIndex];
// expand the grid group
r.ParentGroup.IsExpanded = true;
}
}
private void CheckForPossibleGridExpands()
{
for ( int i=0; i
JS
Jason Southgate
October 21, 2004 07:58 AM UTC
Sorry this was the overloaded method in the end:
private void CheckForPossibleGridExpands()
{
for ( int i=0; i
SIGN IN To post a reply.
- 3 Replies
- 2 Participants
-
JS Jason Southgate
- Oct 21, 2004 05:25 AM UTC
- Oct 21, 2004 07:58 AM UTC
5/10/2026 08:31:49 PM
Sun, 15 December 2024 03:30:00 UTC
Sun, 15 December 2024 03:30:00 AM
Wed, 16 Feb 2022 04:59:00 UTC