# Retrieve Data from database table to Non-Database EpiDataView

**URL:** <https://www.epiusers.help/t/retrieve-data-from-database-table-to-non-database-epidataview/71342>\
**Category:** Epicor ERP 10\
**Tags:** customization\
**Created:** [September 29, 2020, 7:52am UTC](https://www.epiusers.help/t/retrieve-data-from-database-table-to-non-database-epidataview/71342 "2020-09-29T07:52:53Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![wjteoh](https://www.epiusers.help/user_avatar/www.epiusers.help/wjteoh/32/28804_2.png) [@wjteoh](https://www.epiusers.help/u/wjteoh)\
**Post date:** [September 29, 2020, 7:52am UTC](https://www.epiusers.help/t/retrieve-data-from-database-table-to-non-database-epidataview/71342/1 "2020-09-29T07:52:53Z")

</div>

Hi, Recently I’m implementing additional field which is manufacturer part number. At first everything’s fine, I can create a UD field in Part\_UD after that save some value to it and retrieved it on Job Entry using this:

 ![image](https://www.epiusers.help/uploads/default/original/3X/3/c/3ccd4c26f70410a091db7829b3b8ea4f2c337244.png)  
 ![image](https://www.epiusers.help/uploads/default/original/3X/0/a/0a542bdb23f07dbb89ac0c670fa1e59824c42632.png)

> Blockquote  
> private void QuoteDtl\_AfterFieldChange(object sender, DataColumnChangeEventArgs args)  
> {  
> // \*\* Argument Properties and Uses \*\*  
> // args.Row[“FieldName”]  
> // args.Column, args.ProposedValue, args.Row  
> // Add Event Handler Code  
> switch (args.Column.ColumnName)  
> {  
> case “PartNum”:  
> PartAdapter adpPart = new PartAdapter(this.oTrans);  
> adpPart.BOConnect();  
> adpPart.GetByID(Convert.ToString(args.ProposedValue));

```
        string MfrPartNum_c = Convert.ToString(adpPart.PartData.Tables["Part"].Rows[0]["MfrPartNum_c"]);
		string PartBrand_c = Convert.ToString(adpPart.PartData.Tables["Part"].Rows[0]["PartBrand_c"]);			
												
        args.Row["MfrPartNum_c"] = MfrPartNum_c;
		args.Row["PartBrand_c"] = PartBrand_c;			
        adpPart.Dispose();		
	break;
}

```

}

> Blockquote  
> When face the obstacles when comes to a form that’s build up by non-database table which is issues material form.

1. So first think I did is to create a field for binding purposes  
((EpiDataView)oTrans.EpiDataViews[“Select”]).dataView.Table.Columns.Add(“MfrPartNum\_c”, typeof(String));  
 ![image](https://www.epiusers.help/uploads/default/original/3X/f/6/f6f7004db084c9c77a311dfc243d876bb90b69ae.png)

After I did that, I went to Form Event Wizard to generate a AfterFieldChange event  
private void SelectedJobAsmbl\_AfterFieldChange(object sender, DataColumnChangeEventArgs args)  
{  
// \*\* Argument Properties and Uses \*\*  
// args.Row[“FieldName”]  
// args.Column, args.ProposedValue, args.Row  
// Add Event Handler Code

```
		switch (args.Column.ColumnName)
		{
			case "JobNum":

				EpiDataView edvSelect = (EpiDataView)oTrans.EpiDataViews["SelectedJobAsmbl"];
						
			if(edvSelect.dataView.Count > 0)
				{
				string partNum = Convert.ToString(edvIM.dataView[edvIM.Row]["PartNum"] );			              
	
					PartAdapter adpPart = new PartAdapter(this.oTrans);
					adpPart.BOConnect();					
					bool MorePages;
					String whereClause = "PartNum='"+partNum+"'";
					SearchOptions opts = new SearchOptions(SearchMode.AutoSearch);
					opts.NamedSearch.WhereClauses.Add("Part", whereClause);
					DataSet dsPart = adpPart.GetRows(opts, out MorePages);

			if(dsPart.Tables["Part"].Rows.Count>0)
					{
						  
			    	string MfrPartNum_c = Convert.ToString(adpPart.PartData.Tables["Part"].Rows[0]["MfrPartNum_c"]);
			
					edvSelect.dataView[edvSelect.Row]["MfrPartNum_c"] = MfrPartNum_c;
				
					}			
			       // adpPart.Dispose();

				//dvSelect.dataView[edvSelect.Row]["MfrPartNum_c"] = edvCallContextBpmData.dataView[edvCallContextBpmData.Row]["Character01"];
				}

				break;
		}

```

After that, when I try run, this error message prompted out,

 ![image](https://www.epiusers.help/uploads/default/original/3X/d/5/d535824a253a946e280b2f578a57a0ebee369887.png)

Anyone has any idea on this?

Thank you!

---

<div class="post-metadata">

**Author:** ![wjteoh](https://www.epiusers.help/user_avatar/www.epiusers.help/wjteoh/32/28804_2.png) [@wjteoh](https://www.epiusers.help/u/wjteoh)\
**Post date:** [September 29, 2020, 9:22am UTC](https://www.epiusers.help/t/retrieve-data-from-database-table-to-non-database-epidataview/71342/2 "2020-09-29T09:22:56Z")

</div>

Hey Guys, I’ve found the solution.  
I will paste the code here incase any of u need help.

extern alias Erp\_Adapters\_Part;

extern alias Erp\_Contracts\_BO\_IssueReturn;  
extern alias Erp\_Contracts\_BO\_JobEntry;  
extern alias Erp\_Contracts\_BO\_JobAsmSearch;  
extern alias Erp\_Contracts\_BO\_JobMtlSearch;

using System;  
using System.ComponentModel;  
using System.Data;  
using System.Diagnostics;  
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;

public class Script  
{  
// \*\* Wizard Insert Location - Do Not Remove ‘Begin/End Wizard Added Module Level Variables’ Comments! \*\*  
// Begin Wizard Added Module Level Variables \*\*

```
private EpiDataView edvIM;
private EpiDataView edvCallContextBpmData;
private EpiDataView edvSelect;
// End Wizard Added Module Level Variables **

// Add Custom Module Level Variables Here **

public void InitializeCustomCode()
{
	// **Wizard Insert Location - Do not delete 'Begin/End Wizard Added Variable Initialization' lines**
	// Begin Wizard Added Variable Initialization
	((EpiDataView)oTrans.EpiDataViews["Select"]).dataView.Table.Columns.Add("MfrPartNum_c", typeof(String));

	this.edvIM = ((EpiDataView)(this.oTrans.EpiDataViews["IM"]));

	this.edvCallContextBpmData = ((EpiDataView)(this.oTrans.EpiDataViews["CallContextBpmData"]));

	this.SelectedJobAsmbl_Column.ColumnChanged += new DataColumnChangeEventHandler(this.SelectedJobAsmbl_AfterFieldChange);
	

	this.edvSelect = ((EpiDataView)(this.oTrans.EpiDataViews["Select"]));
	

	// End Wizard Added Variable Initialization
	
	// Begin Wizard Added Custom Method Calls

	SetExtendedProperties();
	// 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.edvIM = null;
	
	this.edvCallContextBpmData = null;
	
	
	
	this.SelectedJobAsmbl_Column.ColumnChanged -= new DataColumnChangeEventHandler(this.SelectedJobAsmbl_AfterFieldChange);
	
	
	
	this.edvSelect = null;

	// End Wizard Added Object Disposal

	// Begin Custom Code Disposal

	// End Custom Code Disposal
}

private void SetExtendedProperties()
{
	// Begin Wizard Added EpiDataView Initialization
	EpiDataView edvIM = ((EpiDataView)(this.oTrans.EpiDataViews["IM"]));
	// End Wizard Added EpiDataView Initialization

	// Begin Wizard Added Conditional Block
	if (edvIM.dataView.Table.Columns.Contains("TranDate"))
	{
		// Begin Wizard Added ExtendedProperty Settings: edvIM-TranDate
		edvIM.dataView.Table.Columns["TranDate"].ExtendedProperties["ReadOnly"] = true;
		// End Wizard Added ExtendedProperty Settings: edvIM-TranDate
	}
	// End Wizard Added Conditional Block
}

private void SelectedJobAsmbl_AfterFieldChange(object sender, DataColumnChangeEventArgs args)
	{
		// **Argument Properties and Uses**
		// args.Row["FieldName"]
		// args.Column, args.ProposedValue, args.Row
		// Add Event Handler Code

		switch (args.Column.ColumnName)
		{
			case "JobNum":
			if(edvSelect.dataView.Count > 0)
			{
				string partNum = Convert.ToString(edvSelect.dataView[edvSelect.Row]["PartNum"] );

					PartAdapter adpPart = new PartAdapter(this.oTrans);
					adpPart.BOConnect();
					bool MorePages;
					String whereClause = "PartNum='"+partNum+"'";
					SearchOptions opts = new SearchOptions(SearchMode.AutoSearch);
					opts.NamedSearch.WhereClauses.Add("Part", whereClause);
					DataSet dsPart = adpPart.GetRows(opts, out MorePages);

				if(dsPart.Tables["Part"].Rows.Count>0)
				{
					string MfrPartNum_c = Convert.ToString(dsPart.Tables["Part"].Rows[0]["MfrPartNum_c"]);
	
					edvSelect.dataView[edvSelect.Row].BeginEdit();	
					edvSelect.dataView[edvSelect.Row]["MfrPartNum_c"] = MfrPartNum_c;
					edvSelect.dataView[edvSelect.Row].EndEdit();

				}

  			 adpPart.Dispose();
			}
			break;
		}

		
	}

```

}
