This approach is better than using SearchFilter property (in the XAML editor), because the filter may depend on one or more controls (DataGrid Column) which change their value(s) frequently.
public override bool ItemSearching(FrameworkElement sourceControl)
{
bool result = base.ItemSearching(sourceControl);
if (dgMaterial.IsKeyboardFocusWithin) //TextBoxSearch in DataGrid
{
if (dgMaterial.SelectedColumn == dgMaterialSeriennr) //DataGrid Column
{
dgMaterialSeriennr.SearchFilter = GetSeriennrFilter(); //Set filter
}
else if (dgMaterial.SelectedColumn == dgMaterialLagerorte)
{
dgMaterialLagerorte.SearchFilter = GetLagerorteFilter(); //Set filter
}
}
return result;
}
public virtual string GetSeriennrFilter()
{
var filter = "bestand > 0 AND seriennr.status <> 10";
if (SelectedMaterialRow != null)
{
filter += string.Format(" AND seriennr.art_nr = '{0}' AND bestand_detail.lager_nr = {1}", SelectedMaterialRow.art_nr, SelectedMaterialRow.lager_nr);
}
return filter;
}
The following method can be found in wndTermin and it shows the IteamSearching approach for DataPanel Controls (xTextBoxSearch).
public override bool ItemSearching(FrameworkElement sourceControl)
{
if (sourceControl == tbsGPNr) //DataPanel Control
{
var persTyp = _context.pers_typ ?? 0;
if (persTyp != 0)
tbsGPNr.SearchFilter = string.Format("perstyp = {0}", persTyp);
}
return base.ItemSearching(sourceControl);
}
ItemSearched [deprecated]
This no longer exists in v16+.
At this point, the search-action has already taken place.
public override void ItemSearched(FrameworkElement sourceControl, xSqlResult result)
{
base.ItemSearched(sourceControl, result);
var textBoxSearch = sourceControl as xTextBoxSearch;
if (textBoxSearch == null) return;
if (sourceControl.Name == dgMaterialSeriennr.Name) //DataGrid Column
{
SetSerriennr(textBoxSearch.ResultRow); //Set filter
}
return result;
}
The following method can be found in wndTermin and it shows the IteamSearched approach for DataPanel Controls (xTextBoxSearch).
public override void ItemSearched(FrameworkElement sourceControl, xSqlResult result)
{
base.ItemSearched(sourceControl, result);
xTextBoxSearch textBoxSearch = sourceControl as xTextBoxSearch;
if (textBoxSearch == null) return;
if (textBoxSearch == tbsSerienNrSearch) //DataPanel Control
{
OnSerienNrSearched(textBoxSearch);
SelectSerienNrColumn();
}
}