【DataTable】结构体包含List,赋值时List为空报错/// 查询结果绑定到DataTable

 错误信息:$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;
                                }
                            }
                        }

 

转载于:https://my.oschina.net/8824/blog/3080087

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值