错误信息:$exception {"Object reference not set to an instance of an object."}
解决方法:用Array.Resize()给list进行初始化【服务器端】
#region Main
List<UQcmcoatemplate> uQcmcoatemplateList = null;
if (InTag._cmn_in._proc_step == "1")// Select UQcmcoatemplate List by CoaId
{
uQcmcoatemplateList=ctx.UQcmcoatemplate.Where(t=>t.CoaTemplateId.CompareTo(sNextCoaId)>=0&&t.Factory==sFactory).ToList();
}
#endregion
int iRowCount = uQcmcoatemplateList.Count;
index = 0;
#region Output
Array.Resize(ref OutTag.coa_list, iRowCount > GlobalVariable.giMaxRecordsRows ? GlobalVariable.giMaxRecordsRows : iRowCount);
for (index = 0; index < uQcmcoatemplateList.Count; index++)
{
OutTag.coa_list[index].coa_id = uQcmcoatemplateList[index].CoaTemplateId;
OutTag.coa_list[index].coa_desc = uQcmcoatemplateList[index].CoaDesc;
OutTag.coa_list[index].custom_mat_id = uQcmcoatemplateList[index].CustomMatId;
OutTag.coa_list[index].customer = uQcmcoatemplateList[index].Customer;
}
OutTag.coa_count = index;
OutTag._size_coa_list = index;
#endregion
服务器接收由客户端DataTable获取的list,并进行遍历的转换【服务端】
public static void transform_QCM_Update_COA_Template_Item_In_Tag(MessageRequest request, ref QCM_Update_COA_Template_Item_In_Tag targetType)
{
BASCoreType.transform_Cmn_In_Tag(request, ref targetType._cmn_in);
targetType.coa_id = CommonFunction.WithoutSpace(request.RequestNode.GetString("COA_ID".ToUpper()));
TRSNode item_list;
if (request.RequestNode.GetList(0).Count > 0)
{
int p= request.RequestNode.GetList(0).Count;
Array.Resize(ref targetType.coa_temp_item_list, p);
for (int i = 0; i< p; i++)
{
item_list = (TRSNode)request.RequestNode.GetList(0)[i];
serialize_QCM_Update_COA_Template_Item_In_Tag_coa_list( item_list, ref targetType.coa_temp_item_list[i]);
}
}
}
public static void serialize_QCM_Update_COA_Template_Item_In_Tag_coa_list( TRSNode item_list, ref QCM_Update_COA_Template_Item_In_Tag_coa_list sourceType)
{
sourceType.step= item_list.ProcStep;
sourceType.item_seq = item_list.GetInt("item_seq".ToUpper());
sourceType.testing_item = CommonFunction.WithoutSpace(item_list.GetString("testing_item".ToUpper()));
sourceType.testing_method = CommonFunction.WithoutSpace(item_list.GetString("testing_method".ToUpper()));
sourceType.testing_specification = CommonFunction.WithoutSpace(item_list.GetString("testing_specification".ToUpper()));
sourceType.dimens = CommonFunction.WithoutSpace(item_list.GetString("dimens".ToUpper()));
}
=========================
结果绑定(也可以直接gdvDetail.DataSource=dt,只是以下这种方式可以通过数组的-1不显示某列)【客户端】
private bool BindGV()
{
//IFCF.InitListView(lstUser);
DataTable dt = QCMLIST.ViewInspectionSetListWithIcon();
if (dt != null)
{
DevGridControlHelper.BindData(gdcDetail, dt, new int[] { 1, 1, 1, -1 });
gdvDetail.Columns[0].Width = 20;
return true;
}
else
{
return false;
}
}
UI层绑定数据【客户端】:
private void gdcItem_Load(object sender, EventArgs e)
{
dt.Columns.Add("项目");
//dt.Columns.Add("结果");
dt.Columns.Add("范围");
dt.Columns.Add("单位");
dt.Columns.Add("测试方法");
//dt.Rows.Add("外观", "无色透明", "-", "-", "XC-SOP-QC-03004");
//dt.Rows.Add("粘度", "12500", "12万-15万", "cps / 25℃", "XC-SOP-QC-03002");
//dt.Rows.Add("固含量", "36.3", "35-39", "%", "XC-SOP-QC-03001");
//dt.Rows.Add("色数", "18", "-", "-", "XC-SOP-QC-03004");
//View_Inspection_Item();
dt = QCMLIST.ViewQcmCoaTemplate(saTableKeys[1]);
//txtLotID.Text = dt.get
DevGridControlHelper.BindData(gdcItem, dt, new int[] {-1, 1, 1, 1, 1});
//gridControl1.DataSource = dt;
}
Service层绑定数据:
/**
* 载入COA详细模板
* */
public static DataTable ViewQcmCoaTemplate(string sCoaId)
{
try
{
DataTable dtResult = new DataTable();
ArrayList a_list = new ArrayList();
TRSNode in_node = new TRSNode("IN");
TRSNode out_node;
dtResult.Columns.Add("ITEM_SEQ");
dtResult.Columns.Add("TESTING_ITEM");
dtResult.Columns.Add("TESTING_SPECIFICATION");
dtResult.Columns.Add("DIMENS");
dtResult.Columns.Add("TESTING_METHOD");
//dtResult.Columns.Add("ITEM_SEQ");
//dtResult.Columns.Add("CREATE_USER_ID");
//dtResult.Columns.Add("CREATE_TIME");
//dtResult.Columns.Add("UPDATE_USER_ID");
//dtResult.Columns.Add("UPDATE_TIME");
CommonRoutine.SetInMsg(in_node);
in_node.ProcStep = '1';
string sExtFactory = "15车间";
if (sExtFactory != "")
{
in_node.Factory=sExtFactory;
}
if (sCoaId != "")
{
in_node.AddString("NEXT_COA_ID", sCoaId);
}
do
{
out_node = new TRSNode("OUT");
if (CommonRoutine.CallService("QCM", "QCM_View_COA_Template", in_node, ref out_node) == false)
{
return null;
}
a_list.Add(out_node);
//dtResult.Columns.Add("LOT_ID");
//dtResult.Columns.Add("TRAN_DATE");
//dtResult.Columns.Add("DESCRIPTION");
in_node.SetString("NEXT_ITEM_ID", out_node.GetString("NEXT_ITEM_ID"));//ToDo: 服务器端NEXT_ITEM_ID查询未实现
} while (in_node.GetString("NEXT_ITEM_ID") != "");
foreach (object obj in a_list)
{
out_node = null;
out_node = (TRSNode)obj;
for (int i = 0; i < out_node.GetList(0).Count; i++)
{
dtResult.Rows.Add(
out_node.GetList(0)[i].GetInt("ITEM_SEQ"),
out_node.GetList(0)[i].GetString("TESTING_ITEM"),
out_node.GetList(0)[i].GetString("TESTING_SPECIFICATION"),
out_node.GetList(0)[i].GetString("DIMENS"),
out_node.GetList(0)[i].GetString("TESTING_METHOD")
//out_node.GetList(0)[i].GetInt("ITEM_SEQ")
//out_node.GetList(0)[i].GetString("CREATE_USER_ID"),
//out_node.GetList(0)[i].GetString("CREATE_TIME"),
//out_node.GetList(0)[i].GetString("UPDATE_USER_ID"),
//out_node.GetList(0)[i].GetString("UPDATE_TIME")
);
}
}
return dtResult;
}
catch (Exception ex)
{
CommonFunction.ShowMsgBox(ex.Message);
return null;
}
}
===============================
获取DataTable中某一列的值进行非空判端【客户端】:
DataTable dt = (DataTable)gdcCOAItem.DataSource;
foreach (DataRow dr in dt.Rows)
{
if (dr.RowState != DataRowState.Deleted)
{
if (dr["TESTING_RESULT"].ToString().Trim() == "")
{
CommonFunction.ShowMsgBox(CommonFunction.GetMessage(108));
return false;
}
}
if (dr.RowState != DataRowState.Deleted)
{
if (dr["ITEM_SEQ"].ToString().Trim() == "")
{
CommonFunction.ShowMsgBox(CommonFunction.GetMessage(108));
return false;
}
}
}