Mass edit open jobs

Something like this?

// **************************************************
// Custom code for MainController
// Created: 2/16/2021 11:06:55 PM
// **************************************************
using System;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Windows.Forms;
using Ice.BO;
using Ice.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 Ice.Core;
using Infragistics.Win.UltraWinToolbars;
using Infragistics.Win.UltraWinGrid;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

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 **

	readonly bool True = true;
	readonly bool False = false;
	readonly string uBAQName = "q4dsbJobMtlReplace";
	readonly string[] colsToHide = new string[] { "JobMtl_RequiredQty","RowMod", "RowIdent", "SysRowID" };
	string CompanyID = "";
	EpiDataView edv;
	DynamicQueryAdapter uBAQ;
	DataSet dsPart;
	DataTable results;

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

		// End Wizard Added Variable Initialization

		// Begin Wizard Added Custom Method Calls

		// End Wizard Added Custom Method Calls

		etbOldPart.Validating += new System.ComponentModel.CancelEventHandler(etbOldPart_Validating);
		etbNewPart.Validating += new System.ComponentModel.CancelEventHandler(etbNewPart_Validating);
		ebSelectAll.Click += new System.EventHandler(ebSelectAll_Click);
		ebGetJobList.Click += new System.EventHandler(ebGetJobList_Click);
		ebUpdateParts.Click += new System.EventHandler(ebUpdateParts_Click);
		uBAQ = new DynamicQueryAdapter(this.oTrans);
		uBAQ.BOConnect();
		uBAQ.GetByID(uBAQName);
		CompanyID = ((Ice.Core.Session)(oTrans.Session)).CompanyID;
		ebSelectAll.ReadOnly = true;
		ebUpdateParts.ReadOnly = true;
		ebGetJobList.ReadOnly = true;
	}

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

		// End Wizard Added Object Disposal

		// Begin Custom Code Disposal

		// End Custom Code Disposal

		etbOldPart.Validating -= new System.ComponentModel.CancelEventHandler(etbOldPart_Validating);
		etbNewPart.Validating -= new System.ComponentModel.CancelEventHandler(etbNewPart_Validating);
		ebGetJobList.Click -= new System.EventHandler(ebGetJobList_Click);
		ebUpdateParts.Click -= new System.EventHandler(ebUpdateParts_Click);
		ebSelectAll.Click -= new System.EventHandler(ebSelectAll_Click);
		uBAQ.Dispose();
		edv.Dispose();
		results.Dispose();
		dsPart.Dispose();
	}

	private void ebSelectAll_Click(object sender, System.EventArgs args)
	{
		DataView dvMtl = edv.dataView;
		eugJobsList.BeginUpdate();
		eugJobsList.SuspendRowSynchronization();
		foreach (DataRowView row in dvMtl)
		{
			if (!Convert.ToBoolean(row["Calculated_Select_Row"]))
			{
				row.BeginEdit();
				row["Calculated_Select_Row"] = true;
				row.EndEdit();
			}
		}
		eugJobsList.ResumeRowSynchronization();
		eugJobsList.EndUpdate();
	}

	private void ebGetJobList_Click(object sender, System.EventArgs args)
	{
		eugJobList_GetList();
		if(eugJobsList.Rows.Count>1) ebSelectAll.ReadOnly = false;
	}

	private void eugJobList_GetList()
	{
		Ice.BO.QueryExecutionDataSet dsBAQ;
		Ice.BO.DynamicQueryDataSet dsQuery;
		Ice.BO.DynamicQueryDataSet dsQDesign;

		if (((string)etbOldPart.Value!=null) && ((string)etbOldPart.Value != string.Empty) && (((string)(etbOldPart.Value)+" ").Trim()!=string.Empty)) {
			try {
				dsQuery = uBAQ.DynamicQueryData;
				if (dsQuery.DynamicQuery.Rows.Count == 0)
				{
					dsQDesign = uBAQ.QueryDesignData;
					DataRow targetRow;
					foreach (DataTable table in dsQuery.Tables)
					{
						foreach (DataRow sourceRow in dsQDesign.Tables[table.ToString()].Rows)
						{
							targetRow = table.NewRow();
							targetRow.ItemArray = sourceRow.ItemArray;
							table.Rows.Add(targetRow);
						}
					}
				}
				dsBAQ = uBAQ.GetQueryExecutionParameters(dsQuery);
				dsBAQ.ExecutionParameter[0].ParameterID = "SearchPart";
				dsBAQ.ExecutionParameter[0].IsEmpty = false;
				dsBAQ.ExecutionParameter[0].ParameterValue = ((string)(etbOldPart.Value)+" ").Trim();
				dsBAQ.ExecutionParameter[1].ParameterID = "UnFirmJobs";
				dsBAQ.ExecutionParameter[1].IsEmpty = false;
				dsBAQ.ExecutionParameter[1].ParameterValue = ckbUnFirmJobs.Checked.ToString();
				dsBAQ.AcceptChanges();
				uBAQ.Execute(dsQuery, dsBAQ);
				if (uBAQ.QueryResults != null && uBAQ.QueryResults.Tables.Count > 0)
				{
					results = uBAQ.QueryResults.Tables["Results"];
				}
				else
				{
					results = new DataTable();
				}
				edv = (EpiDataView)oTrans.EpiDataViews[uBAQName];	
				if (!(edv != null))
				{
					edv = new EpiDataView();
					oTrans.Add(uBAQName, edv);
				}
				edv.dataView = results.DefaultView;		
				eugJobsList.DataSource = edv.dataView;
				// Hide select columns
				foreach(string colToHide in colsToHide) 
				{
					if (edv.dataView.Table.Columns.Contains(colToHide))
					{
						eugJobsList.DisplayLayout.Bands[0].Columns[colToHide].Hidden = true;
					}
				}				
			} 
			catch (Exception ex) {
				ExceptionBox.Show(ex);
			}
		} else { MessageBox.Show((etbOldPart.Value+" ").Trim()); }
	}

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

		DataView dvMtl = edv.dataView;
		string msg = string.Empty;
		string sJobsListUnFirm = string.Empty;
		List<string> unFirmRows = new List<string>();

		eugJobsList.BeginUpdate();
		eugJobsList.SuspendRowSynchronization();
		if (ckbUnFirmJobs.Checked)
		{
			foreach (DataRowView row in dvMtl)
			{
				if (!Convert.ToBoolean(row["JobHead_JobFirm"]) && Convert.ToBoolean(row["Calculated_Select_Row"]))
				{
					unFirmRows.Add(Convert.ToString(row["SysRowID"]));
					row.BeginEdit();
					row["JobHead_JobFirm"] = true;
					row.EndEdit();
				}
			}
			uBAQ.Update(uBAQ.DynamicQueryData, results.DataSet, false);   // Update Jobs to Firm to enable part replacement
		}

		foreach (DataRowView row in dvMtl)
		{
			if (Convert.ToBoolean(row["Calculated_Select_Row"]))
			{
				row.BeginEdit();
				row["JobMtl_PartNum"] = etbNewPart.Value;
				row["JobMtl_Description"] = etbNewDesc.Value;
				row.EndEdit();
			}
		}
		uBAQ.Update(uBAQ.DynamicQueryData, results.DataSet, false);
		if (ckbUnFirmJobs.Checked)
		{
			foreach (DataRowView row in dvMtl)
			{
				if (unFirmRows.Contains(Convert.ToString(row["SysRowID"])))
				{
					row.BeginEdit();
					row["JobHead_JobFirm"] = false;
					row.EndEdit();
				}
			}
			uBAQ.Update(uBAQ.DynamicQueryData, results.DataSet, false);   // Restore Job Firm Level
		}
		eugJobsList.ResumeRowSynchronization();
		eugJobsList.EndUpdate();
	}

	private bool isValidPart(string pn) 
	{
		bool recSelected = false;
		string whereClause = "Company = '" + CompanyID + "' AND PartNum = '" + pn + "'" ;
		dsPart = Ice.UI.FormFunctions.SearchFunctions.listLookup(this.oTrans, "PartAdapter", out recSelected, false, whereClause);
		return recSelected;	
	}

	private void etbOldPart_Validating(object sender, System.ComponentModel.CancelEventArgs args)
	{
		// Lookup Description for OldPartNum and unset ReadOnly if all good :)
		if ( isValidPart(etbOldPart.Text) ) 
		{
			if(ebGetJobList.ReadOnly) ebGetJobList.ReadOnly = false;
		}
		else 
		{ 
			if(!ebGetJobList.ReadOnly) ebGetJobList.ReadOnly = true;
			MessageBox.Show(etbOldPart.Text + " is NOT a vaild part number.");
			//args.Cancel=true;
		}
	}

	private void etbNewPart_Validating(object sender, System.ComponentModel.CancelEventArgs args)
	{
		// Lookup Description for NewPartNum and unset ReadOnly if all good :)
		if ( isValidPart(etbNewPart.Text) ) 
			{
			etbNewDesc.Value = dsPart.Tables[0].Rows[0]["PartDescription"];
			if(ebUpdateParts.ReadOnly) ebUpdateParts.ReadOnly=false;	
			} 
		else 
			{
			if(!ebUpdateParts.ReadOnly) ebUpdateParts.ReadOnly=true;	
			MessageBox.Show(etbNewPart.Text + " is NOT a vaild part number.");
			//args.Cancel=true;
			}
	}

Dang late to the party, I found this code I had same thing for…
Just had no time until now to post this.