public static void GenLoad(StreamWriter sw, string baseTable, VarDefine varDefine, Bean.VarData varData, Property.DataOutputFlags flags) { switch (varDefine.TypeNow) { case VarDefine.EType.Date: // 先使用string. 看看lua怎么用。 if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = \"{varData.Value}\""); } else if (false == string.IsNullOrEmpty(varDefine.Default)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = \"{varDefine.Default}\""); } break; case VarDefine.EType.Int: case VarDefine.EType.Float: case VarDefine.EType.Double: case VarDefine.EType.Long: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = {varData.Value}"); } else if (false == string.IsNullOrEmpty(varDefine.Default)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = {varDefine.Default}"); } break; case VarDefine.EType.Enum: var enumClassName = varDefine.FullNamePinyin().Replace('.', '_'); if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = Config.Enums.{enumClassName}.{varData.ValuePinyin}"); } else if (false == string.IsNullOrEmpty(varDefine.Default)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = Config.Enums.{enumClassName}.{varDefine.DefaultPinyin}"); } break; case VarDefine.EType.String: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = \"{varData.Value}\""); } else if (false == string.IsNullOrEmpty(varDefine.Default)) { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = \"{varDefine.Default}\""); } else { sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = \"\""); } break; case VarDefine.EType.List: sw.WriteLine($"{baseTable}.{varDefine.NamePinyin} = {{}}"); foreach (var bean in varData.Beans) { var beanVarName = $"{baseTable}.{varDefine.NamePinyin}[{bean.RowIndex + 1}]"; sw.WriteLine($"{beanVarName} = {{}}"); GenLoad(sw, beanVarName, varDefine.Reference, bean, flags); } break; } }
public static void GenLoad(StreamWriter sw, string prefix, VarDefine varDefine, Bean.VarData varData, Property.DataOutputFlags flags) { switch (varDefine.TypeNow) { case VarDefine.EType.Date: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{prefix}V{varDefine.Name}: new Date(\"{varData.Value}\"),"); } break; case VarDefine.EType.Double: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{prefix}V{varDefine.Name}: {varData.Value},"); } break; case VarDefine.EType.Enum: sw.WriteLine($"{prefix}V{varDefine.Name}: {varDefine.FullName().Replace('.', '_')}.{varData.Value}"); break; case VarDefine.EType.Float: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{prefix}V{varDefine.Name}: {varData.Value},"); } break; case VarDefine.EType.Int: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{prefix}V{varDefine.Name}: {varData.Value},"); } break; case VarDefine.EType.Long: if (false == string.IsNullOrEmpty(varData.Value)) { sw.WriteLine($"{prefix}V{varDefine.Name}: {varData.Value},"); } break; case VarDefine.EType.String: var strValue = (null == varData.Value) ? "" : varData.Value; sw.WriteLine($"{prefix}V{varDefine.Name}: \"{strValue}\","); break; case VarDefine.EType.List: sw.WriteLine($"{prefix}V{varDefine.Name}: ["); foreach (var bean in varData.Beans) { sw.Write(prefix + " "); GenLoad(sw, prefix + " ", varDefine.Reference, bean, flags); sw.WriteLine(","); } sw.WriteLine($"{prefix}],"); break; } }
public override void VerifyCell(VerifyParam p) { int colListStart = GridData.FindColumnListStart(p.Grid, p.ColumnIndex); if (colListStart < 0) { return; // Not A List Item } int colListEnd = GridData.FindColumnListEnd(p.Grid, p.ColumnIndex); if (colListStart < 0) { return; // Not A List Item. FindColumnListStart 应该足够判断了,都判断一下吧。 } // collect list item cell int colBeanBegin = colListStart + 1; List <GridData.Cell> cells = new List <GridData.Cell>(); while (colBeanBegin < colListEnd) { colBeanBegin = GridData.DoActionUntilBeanEnd(p.Grid, colBeanBegin, colListEnd, (int col) => { ColumnTag tag = (ColumnTag)p.Grid.GetColumn(col).ColumnTag; if (tag.Tag != ColumnTag.ETag.Normal) { return; } if (tag.Path.Count == p.ColumnTag.Path.Count && // same level. tag.PathLast.Define == p.ColumnTag.PathLast.Define) // same var { cells.Add(p.Grid.GetRow(p.RowIndex).Cells[col]); } }); } ColumnTag tagListEnd = p.Grid.GetColumn(colListEnd).ColumnTag; int pathListVar = tagListEnd.Path.Count - 1; Bean.VarData varList = tagListEnd.PathLast.Define.Parent.Document.Beans[p.RowIndex] .GetVarData(0, tagListEnd, pathListVar); int varListCount = varList == null ? 0 : varList.Beans.Count; // count same oldValue HashSet <GridData.Cell> same = new HashSet <GridData.Cell>(); if (p.OldValue != null) { // load时 varListCount 包含所有数据。 // Validating 时,如果是新增的,varListCount少1。 // 计数 oldValue 不需要判断新数据,这里不需要额外判断。 for (int i = 0; i < varListCount; ++i) { var c = cells[i]; if (c == p.Cell) { continue; } string str = c.Value; if (p.OldValue.Equals(str)) { same.Add(c); } } if (same.Count == 1) { p.FormMain.FormError.RemoveError(same.First(), this); } same.Clear(); } // count same newValue // load时 varListCount 包含所有数据。 // Validating 时,如果是新增的,varListCount少1。当前新增cell在后面Add。所以不需要特别处理。 for (int i = 0; i < varListCount; ++i) { var c = cells[i]; if (c == p.Cell) { continue; } string str = c.Value; if (p.NewValue.Equals(str)) { same.Add(c); } } // report if (same.Count >= 1) { same.Add(p.Cell); p.FormMain.FormError.AddError(same, this, ErrorLevel.Error, Name + " 重复啦。"); } else { p.FormMain.FormError.RemoveError(p.Cell, this); } }