Gets or sets a value indicating whether this Row is filtered.

Namespace: Dapfor.Net.Ui
Assembly: Dapfor.Net (in Dapfor.Net.dll) Version: 2.10.3.24917 (2.10.3.24917)

Syntax

C#
public bool Filtered { get; set; }
Visual Basic
Public Property Filtered As Boolean
	Get
	Set
Visual C++
public:
property bool Filtered {
	bool get ();
	void set (bool value);
}
F#
member Filtered : bool with get, set

Property Value

Type: Boolean
true if filtered; otherwise, false.

Remarks

Simply put, data filtration is managing visibility of rows in the grid. Row invisibility in the grid means that the row is still in the grid, but it is invisible together with its children. It's important to say that this row can be accessed only via Nodes/Children collection properties. In the Rows property invisible rows are absent, as it shows only visible rows. Filtration is particularly important when data is grouped. If there are no visible rows, the whole group becomes invisible (but is not removed!). If a filtered row should be made visible again, it takes certain position according to the sorting rules if any.

.Net Grid presents 3 ways of data filtration:

  • Setting boolean in the Filtered property
  • Implementing the IFilter interface and setting it with the Filter property
  • Filters in columns

The first way is the easiest to use, however, we recommend you to favor the second one that provides definite advantages.

The IFilter interface has only one property IsFiltered(Row). This method is invoked when data is inserted into the data grid. It is also invoked every time Update()()()() and FilterRefresh()()()() methods are called. Therefore, grid rows always meed the filtration criteria. However, when IFilter interface is not implemented, the invocation of Update()()()() doesn't result in data filtration and newly added data is always visible in the grid until the Filtered call. Besides, when filtering conditions are changed, invocation of FilterRefresh()()()() doesn't make the row visible the programmer should iterate through every row in the data grid via Nodes and Children collections to verify new conditions. There is an important thing to add regarding multi-threaded applications. Invocation of IsFiltered(Row) method occurs regularly in the GUI thread, and it should be considered during development of multi-threaded applications. Please note that Update()()()() method is thread-safe and can be invoked in any thread.

Data filtration implemented via IFilter interface of non-event-driven model consists in the Row.Update() method call:

 Copy imageCopy
public class CustomFilter : IFilter
{
    public bool IsFiltered(Row row)
    {
        //There are three ways to get cell's value: 
        //1. Via Cell.Value property: double value = (double)row["Price"].Value
        //2. Via IDataAccessor and IDataField: double value = (double) row.DataAccessor["Price"].Value
        //3. Directly from the data object: double value = (double)((IList)row.DataObject)[2];

        if ((double)row["Price"].Value < 30000)
        {
            //Filter the row
            return true;
        }

        //The row is not filtered
        return false;
    }

    public event EventHandler<EventArgs> FilterUpdated;
}

public void FilterUsing(Grid grid)
{
    //Initialize the grid
    grid.Headers.Add(new Header());
    grid.Headers[0].Add(new Column("Name"));
    grid.Headers[0].Add(new Column("Color"));
    grid.Headers[0].Add(new Column("Price"));

    //Set filter
    grid.Filter = new CustomFilter();

    //Populate the grid
    Row row1 = grid.Rows.Add(new object[] { "Mercedes", Color.Black, 25000d});
    Assert.IsFalse(row1.Visible);

    Row row2 = grid.Rows.Add(new object[] { "BMW", Color.White, 35000d });
    Assert.IsTrue(row2.Visible);

    //Set a new price for "Mercedes"
    row1["Price"].Value = 32000d;
    Assert.IsTrue(row1.Visible);
}

Thread Safety

The function is thread safe.

See Also