private JArray getJsonForGrid(Models.ModelBase.Row_userGroup actRow)
        {
            JArray ja = new JArray();

            var itemObject = new JObject();

            itemObject.Add("sysUserGroupId", actRow.sysUserGroupId.ToString());
            if (actRow.RowStatus.ToString() == "M")
            {
                itemObject.Add("actUser", actRow.actUser.ToString());
                itemObject.Add("actTime", actRow.actTime.ToString());
            }
            else // "A"
            {
                itemObject.Add("creatUser", actRow.creatUser.ToString());
                itemObject.Add("creatTime", actRow.creatTime.ToString());
            }

            ja.Add(itemObject);

            return(ja);
        }
        public ActionResult ActSingle(Models.ModelBase.Row_userGroup actRow)//接收單筆資料方式
        {
            ZhWebClassV3.UserData userData = ZhWebClassV3.UserHelper.GetUserData();
            JObject jo;

            try
            {
                actRow.sysUserGroupId = ZhConfig.ZhIniObj.ACall_checkIsDBNull(actRow.sysUserGroupId);
                actRow.memo           = ZhConfig.ZhIniObj.ACall_checkIsDBNull(actRow.memo);

                #region 判斷啟用中 值,不可重複
                //RE0020
                //errStr += ZhWebClassV1.CheckObj.Chk_ColumnValue(actRow.RowStatus.ToString(), "userGroup", "userGroupName", "使用者群組名稱", actRow.userGroupName.ToString(), "and sysUserGroupId !='" + actRow.sysUserGroupId.ToString() + "' and corpUser is null ");
                strSql.Clear();
                if (actRow.RowStatus.ToString() == "A")
                {
                    strSql.Append("select * from S10_userGroup where userGroupName='" + actRow.userGroupName.ToString() + "' and statusx='10' ");
                }
                else
                {
                    strSql.Append("select * from S10_userGroup where userGroupName='" + actRow.userGroupName.ToString() + "' and statusx='10' and sysUserGroupId <> '" + actRow.sysUserGroupId.ToString() + "' ");
                }
                DataTable tbl_QueryData2 = ZhClass.SqlTool.GetDataTable(ZhConfig.GlobalSystemVar.StrConnection1, strSql.ToString(), "tbl_QueryData2");
                if (tbl_QueryData2.Rows.Count > 0)
                {
                    errStr = "啟用中之使用者群組名稱:【" + actRow.userGroupName.ToString() + "】,<br>不可重複 ";
                }
                else
                {
                    errStr = "";
                }

                if (errStr != "")
                {
                    jo = new JObject();
                    jo.Add("status", "error");
                    jo.Add("error", errStr);

                    return(Content(JsonConvert.SerializeObject(jo), "application/json"));
                }

                #endregion

                #region 設置 要傳入的 SqlParameter 資料
                SqlParameter[] param =
                {
                    //new SqlParameter("sysUserGroupId", SqlDbType.Int,4, ParameterDirection.Output, false, 0, 0, "", DataRowVersion.Proposed,actRow.sysUserGroupId),
                    new SqlParameter("sysUserGroupId", SqlDbType.Int,        4, ParameterDirection.InputOutput, false, 0, 0, "", DataRowVersion.Proposed, actRow.sysUserGroupId),
                    new SqlParameter("userGroupId",    SqlDbType.VarChar,  255, ParameterDirection.Input,       false, 0, 0, "", DataRowVersion.Proposed, actRow.userGroupId),
                    new SqlParameter("userGroupName",  SqlDbType.NVarChar,  -1, ParameterDirection.Input,       false, 0, 0, "", DataRowVersion.Proposed, actRow.userGroupName),
                    new SqlParameter("statusx",        SqlDbType.VarChar,  255, ParameterDirection.Input,       false, 0, 0, "", DataRowVersion.Proposed, actRow.statusx),
                    new SqlParameter("memo",           SqlDbType.NVarChar,  -1, ParameterDirection.Input,       false, 0, 0, "", DataRowVersion.Proposed, actRow.memo),
                    new SqlParameter("creatUser",      SqlDbType.Int,        4, ParameterDirection.Input,       false, 0, 0, "", DataRowVersion.Proposed, userData.sysUserId),
                    //new SqlParameter("creatTime", SqlDbType.DateTime, 8, ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Proposed, actRow.creatTime),
                    new SqlParameter("actUser",        SqlDbType.Int,        4, ParameterDirection.Input,       false, 0, 0, "", DataRowVersion.Proposed, userData.sysUserId),
                };

                #endregion

                strSql.Remove(0, strSql.Length);
                switch (actRow.RowStatus.ToString())
                {
                case "A":
                    strSql.Clear();
                    strSql.Append("insert into S10_userGroup (userGroupId,userGroupName,statusx,memo,creatUser,creatTime) values (@userGroupId,@userGroupName,@statusx,@memo,@creatUser,getdate())");
                    strSql.Append(" SELECT @sysUserGroupId = SCOPE_IDENTITY()  ");
                    actRow.creatUser = userData.userName;
                    actRow.creatTime = DateTime.Now;

                    errStr = SqlTool.ExecuteNonQuery(strSql.ToString(), param);
                    if (errStr != "")
                    {
                        throw new Exception(errStr);
                    }

                    actRow.sysUserGroupId = param[0].Value;

                    break;

                case "M":
                    //,creatUser=@creatUser,creatTime=@creatTime
                    strSql.Append("update S10_userGroup set userGroupId=@userGroupId,userGroupName=@userGroupName,statusx=@statusx,memo=@memo,actUser=@actUser,actTime=getdate() where sysUserGroupId=@sysUserGroupId");
                    actRow.actUser = userData.userName;
                    actRow.actTime = DateTime.Now;

                    errStr = SqlTool.ExecuteNonQuery(strSql.ToString(), param);
                    if (errStr != "")
                    {
                        throw new Exception(errStr);
                    }

                    strSql.Remove(0, strSql.Length);
                    strSql.Append("update S10_userVsGroup set statusx='" + actRow.statusx.ToString() + "' where sysUserGroupId='" + actRow.sysUserGroupId.ToString() + "'");
                    errStr = SqlTool.ExecuteNonQuery(strSql.ToString(), param);
                    if (errStr != "")
                    {
                        throw new Exception(errStr);
                    }

                    break;
                }

                #region OperLog 異動群組資料
                if (Convert.ToBoolean(ZhConfig.GlobalSystemVar.tbl_OperLogFlag.Rows.Find(funcId)["isOperLogEnable"]) && errStr == "")
                {
                    #region Gen tbl_operLog1 Data (Add/Modify)
                    DataTable tbl_operLog1 = userData.Get_tbl_operLogPart1();
                    tbl_operLog1.Columns.Add("sysUserGroupId", typeof(string));

                    DataRow operLogRow = tbl_operLog1.NewRow();
                    //operLogRow["rowId"] =0;
                    operLogRow["actSerial"]      = userData.actSerial;
                    operLogRow["sysUserId"]      = userData.sysUserId;
                    operLogRow["actStatus"]      = actRow.RowStatus.ToString();
                    operLogRow["sysUserGroupId"] = actRow.sysUserGroupId.ToString();

                    tbl_operLog1.Rows.Add(operLogRow);
                    #endregion

                    errStr = ZhWebClassSet.Log.LogSet.SaveOperLog(funcId, "S10_userGroup", tbl_operLog1);
                    if (errStr != "")
                    {
                        throw new Exception(errStr);
                    }
                }
                #endregion

                if (errStr == "")
                {
                    //return Json("OK", JsonRequestBehavior.DenyGet);
                    jo = new JObject();
                    jo.Add("status", "OK");
                    jo.Add("row", getJsonForGrid(actRow));

                    return(Content(JsonConvert.SerializeObject(jo), "application/json"));
                }
                else
                {
                    //return Json(errStr, JsonRequestBehavior.DenyGet);
                    jo = new JObject();
                    jo.Add("status", "error");
                    jo.Add("error", errStr);
                    return(Content(JsonConvert.SerializeObject(jo), "application/json"));
                }
            }
            catch (Exception ex)
            {
                //return Json(ex.Message, JsonRequestBehavior.DenyGet);
                jo = new JObject();
                jo.Add("status", "error");
                jo.Add("error", ex.Message);
                return(Content(JsonConvert.SerializeObject(jo), "application/json"));
            }
        }