Grid Row Highlight - Record Change issue

I’m adding some customizations to our WorkQueue. I would like to highlight rows based on available inventory and/or issued material count (or issued complete).

I have setup FKVs\STVs looking at JobMtl and PartWhse, created a Row Rule for testing. It seems to work when I first load the Queue, but when I click on a row things get a little weird. I lose the highlight across the entire row, with only one column being highlighted, and the color that the selected row should be overrides the color of the other rows. Here’s the code, don’t mind the extra filters, followed by a few examples:

// **************************************************
// Custom code for WorkQueueForm
// Created: 1/21/2019 4:37:32 PM
// **************************************************

extern alias Erp_Contracts_BO_WorkQueue;
extern alias Erp_Contracts_BO_Labor;


extern alias Erp_Contracts_BO_EmpBasic;
extern alias Erp_Contracts_BO_ResourceGroup;
extern alias Erp_Contracts_BO_Resource;

using System;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
using Erp.Adapters;
using Erp.UI;
using Ice.Lib;
using Ice.Adapters;
using Ice.Lib.Customization;
using Ice.Lib.ExtendedProps;
using Ice.Lib.Framework;
using Ice.Lib.Searches;
using Ice.UI.FormFunctions;
using Infragistics.Win;
using Infragistics.Win.UltraWinGrid;
using Infragistics.Shared;

public class Script
{

	// ** Wizard Insert Location - Do Not Remove 'Begin/End Wizard Added Module Level Variables' Comments! **
	// Begin Wizard Added Module Level Variables **

	// End Wizard Added Module Level Variables **

	// Add Custom Module Level Variables Here **

EpiUltraGrid gridcw;
EpiUltraGrid gridew;
EpiTextBox txtJNum;
EpiTextBox txtOpr;
BAQCombo comRes;

	public void InitializeCustomCode()
	{
		// ** Wizard Insert Location - Do not delete 'Begin/End Wizard Added Variable Initialization' lines **
		// Begin Wizard Added Variable Initialization

gridcw = (Ice.Lib.Framework.EpiUltraGrid)csm.GetNativeControlReference("b3e2940f-c81e-4838-9d16-90eff26f2e04");
    gridcw.DisplayLayout.Override.AllowRowFiltering = DefaultableBoolean.True;

gridew = (Ice.Lib.Framework.EpiUltraGrid)csm.GetNativeControlReference("b676168e-36e2-4b9d-9f5c-d43eeb3216a6");
    gridew.DisplayLayout.Override.AllowRowFiltering = DefaultableBoolean.True;

comRes = (Ice.Lib.Framework.BAQCombo)csm.GetNativeControlReference("63e9bbfc-8e80-43aa-82a6-ad22971c8f3b");

txtOpr = (Ice.Lib.Framework.EpiTextBox)csm.GetNativeControlReference("f7786d8e-8b8e-4784-aec6-431f320421e3");

txtJNum = (Ice.Lib.Framework.EpiTextBox)csm.GetNativeControlReference("d0c09d97-76e3-4d5b-bcd4-df09ff15d36f");

		// End Wizard Added Variable Initialization

		// Begin Wizard Added Custom Method Calls

this.comRes.TextChanged += new System.EventHandler(this.comRes_TextChanged);

this.txtOpr.TextChanged += new System.EventHandler(this.txtOpr_TextChanged);

this.txtJNum.TextChanged += new System.EventHandler(this.txtJNum_TextChanged);


		CreateRowRuleCW_MtlIssuedCompleteEquals_true();;
		// End Wizard Added Custom Method Calls
	}

	public void DestroyCustomCode()
	{
		// ** Wizard Insert Location - Do not delete 'Begin/End Wizard Added Object Disposal' lines **
		// Begin Wizard Added Object Disposal

this.comRes.TextChanged -= new System.EventHandler(this.comRes_TextChanged);

this.txtOpr.TextChanged -= new System.EventHandler(this.txtOpr_TextChanged);

this.txtJNum.TextChanged -= new System.EventHandler(this.txtJNum_TextChanged);

		// End Wizard Added Object Disposal

		// Begin Custom Code Disposal

		// End Custom Code Disposal
	}

    private void Filter() 

	{

        Infragistics.Win.UltraWinGrid.FilterCondition fc1 = new Infragistics.Win.UltraWinGrid.FilterCondition();
        fc1.CompareValue = comRes.Text;
        fc1.ComparisionOperator = Infragistics.Win.UltraWinGrid.FilterComparisionOperator.Equals;
        gridcw.DisplayLayout.Bands[0].ColumnFilters["ResourceID"].FilterConditions.Add(fc1);

        Infragistics.Win.UltraWinGrid.FilterCondition fc2 = new Infragistics.Win.UltraWinGrid.FilterCondition();
        fc2.CompareValue = comRes.Text;
        fc2.ComparisionOperator = Infragistics.Win.UltraWinGrid.FilterComparisionOperator.Equals;
        gridew.DisplayLayout.Bands[0].ColumnFilters["ResourceID"].FilterConditions.Add(fc2);

    }

	private void Filter2() 

	{
        Infragistics.Win.UltraWinGrid.FilterCondition fc3 = new Infragistics.Win.UltraWinGrid.FilterCondition();
        fc3.CompareValue = txtJNum.Text;
        fc3.ComparisionOperator = Infragistics.Win.UltraWinGrid.FilterComparisionOperator.StartsWith;
        gridcw.DisplayLayout.Bands[0].ColumnFilters["JobNum"].FilterConditions.Add(fc3);

        Infragistics.Win.UltraWinGrid.FilterCondition fc4 = new Infragistics.Win.UltraWinGrid.FilterCondition();
        fc4.CompareValue = txtJNum.Text;
        fc4.ComparisionOperator = Infragistics.Win.UltraWinGrid.FilterComparisionOperator.StartsWith;
        gridew.DisplayLayout.Bands[0].ColumnFilters["JobNum"].FilterConditions.Add(fc4);

	}

    private void Filter3() 

	{

        Infragistics.Win.UltraWinGrid.FilterCondition fc5 = new Infragistics.Win.UltraWinGrid.FilterCondition();
        fc5.CompareValue = txtOpr.Text;
        fc5.ComparisionOperator = Infragistics.Win.UltraWinGrid.FilterComparisionOperator.StartsWith;
        gridcw.DisplayLayout.Bands[0].ColumnFilters["OpCode"].FilterConditions.Add(fc5);

        Infragistics.Win.UltraWinGrid.FilterCondition fc6 = new Infragistics.Win.UltraWinGrid.FilterCondition();
        fc6.CompareValue = txtOpr.Text;
        fc6.ComparisionOperator = Infragistics.Win.UltraWinGrid.FilterComparisionOperator.StartsWith;
        gridew.DisplayLayout.Bands[0].ColumnFilters["OpCode"].FilterConditions.Add(fc6);

    }

	private void comRes_TextChanged(object sender, System.EventArgs args)
	{

		gridcw.DisplayLayout.Bands[0].ColumnFilters["OpCode"].FilterConditions.Clear();
		gridew.DisplayLayout.Bands[0].ColumnFilters["Opcode"].FilterConditions.Clear();
		gridcw.DisplayLayout.Bands[0].ColumnFilters["JobNum"].FilterConditions.Clear();
		gridew.DisplayLayout.Bands[0].ColumnFilters["JobNum"].FilterConditions.Clear();
		gridcw.DisplayLayout.Bands[0].ColumnFilters["ResourceID"].FilterConditions.Clear(); //clear any existing filters
		gridew.DisplayLayout.Bands[0].ColumnFilters["ResourceID"].FilterConditions.Clear();
    		if(comRes.Text != "")  //don't filter if we have no text
			Filter();

	}

	private void txtJNum_TextChanged(object sender, System.EventArgs args)
	{

		gridcw.DisplayLayout.Bands[0].ColumnFilters["OpCode"].FilterConditions.Clear();
		gridew.DisplayLayout.Bands[0].ColumnFilters["Opcode"].FilterConditions.Clear();
		gridcw.DisplayLayout.Bands[0].ColumnFilters["ResourceID"].FilterConditions.Clear(); //clear any existing filters
		gridew.DisplayLayout.Bands[0].ColumnFilters["ResourceID"].FilterConditions.Clear();
		gridcw.DisplayLayout.Bands[0].ColumnFilters["JobNum"].FilterConditions.Clear(); //clear any existing filters
		gridew.DisplayLayout.Bands[0].ColumnFilters["JobNum"].FilterConditions.Clear();
    		if(txtJNum.Text != "")  //don't filter if we have no text
			Filter2();
	}

	private void txtOpr_TextChanged(object sender, System.EventArgs args)
	{

		gridcw.DisplayLayout.Bands[0].ColumnFilters["OpCode"].FilterConditions.Clear();
		gridew.DisplayLayout.Bands[0].ColumnFilters["Opcode"].FilterConditions.Clear();
		gridcw.DisplayLayout.Bands[0].ColumnFilters["JobNum"].FilterConditions.Clear();
		gridew.DisplayLayout.Bands[0].ColumnFilters["JobNum"].FilterConditions.Clear();
		gridcw.DisplayLayout.Bands[0].ColumnFilters["ResourceID"].FilterConditions.Clear(); //clear any existing filters
		gridew.DisplayLayout.Bands[0].ColumnFilters["ResourceID"].FilterConditions.Clear();
    		if(txtOpr.Text != "")  //don't filter if we have no text
			Filter3();

	}

	private void WorkQueueForm_Load(object sender, System.EventArgs args)
	{
		gridcw.DisplayLayout.Bands[0].ColumnFilters["OpCode"].FilterConditions.Clear();
		gridew.DisplayLayout.Bands[0].ColumnFilters["Opcode"].FilterConditions.Clear();
		gridcw.DisplayLayout.Bands[0].ColumnFilters["JobNum"].FilterConditions.Clear();
		gridew.DisplayLayout.Bands[0].ColumnFilters["JobNum"].FilterConditions.Clear();
		gridcw.DisplayLayout.Bands[0].ColumnFilters["ResourceID"].FilterConditions.Clear();
		gridew.DisplayLayout.Bands[0].ColumnFilters["ResourceID"].FilterConditions.Clear();
	}

	



	





	private void CreateRowRuleCW_MtlIssuedCompleteEquals_true()
	{
		// Description: CW_IssuedComplete
		ControlSettings myCustomSetting = new ControlSettings();
		//Set it orange
		myCustomSetting.BackColor=System.Drawing.Color.LightGreen;
		// **** begin autogenerated code ****
		RuleAction highlightCurrentWork_RowAction = RuleAction.AddRowSettings(this.oTrans, "CurrentWork", false, myCustomSetting);
		RuleAction[] ruleActions = new RuleAction[] {
				highlightCurrentWork_RowAction};
		// Create RowRule and add to the EpiDataView.
		RowRule rrCreateRowRuleCW_MtlIssuedCompleteEquals_true = new RowRule("CW_Mtl.IssuedComplete", RuleCondition.Equals, true, ruleActions);
		((EpiDataView)(this.oTrans.EpiDataViews["CurrentWork"])).AddRowRule(rrCreateRowRuleCW_MtlIssuedCompleteEquals_true);
		// **** end autogenerated code ****
	}


}

On Load:
image

After clicking a new row:

Any idea how to fix this and make it highlight each row independently based on my criteria?