public bool Insert(bool isOpenTrans) { MDataCell cell = _Row.PrimaryCell; if (IsCanDoInsertCheck((cell.IsNullOrEmpty || cell.Struct.IsAutoIncrement || cell.Struct.IsPrimaryKey) ? 1 : 0)) { //判断是否需要增加自增加id if (!cell.Struct.IsCanNull && (cell.Struct.IsAutoIncrement || cell.Struct.IsPrimaryKey)) { #region 给主键赋值 DataGroupType group = DataType.GetGroup(cell.Struct.SqlType); string existWhere = cell.ColumnName + (group == DataGroupType.Number ? "={0}" : "='{0}'"); if (cell.IsNull || cell.State == 0 || cell.StringValue == "0" || Exists(string.Format(existWhere, cell.Value)))//这里检测存在,避免id重复 { switch (group) { case DataGroupType.Number: cell.Value = NextID; break; case DataGroupType.Guid: cell.Value = Guid.NewGuid(); break; case DataGroupType.Text: cell.Value = Guid.NewGuid().ToString(); break; default: return((bool)Error.Throw("first column value can't be null")); } } if (group == DataGroupType.Number || group == DataGroupType.Guid) //再检测是否已存在 { if (!isOpenTrans && Exists(string.Format(existWhere, cell.Value))) //事务时,由于自动补id,避开检测,提升性能 { Error.Throw("first column value must be unique:(" + cell.ColumnName + ":" + cell.Value + ")"); } else if (group == DataGroupType.Number) { maxID = (int)cell.Value; } } #endregion } CheckFileChanged(true); _Row.SetState(0);//状态重置,避免重复使用插入! MDataRow newRow = Table.NewRow(true); newRow.LoadFrom(_Row); _insertRows.Add(newRow);//插入引用,内存表有数据,还没写文章! needToSaveState = needToSaveState > 1 ? 2 : 1; return(true); } return(false); }
private void btnGetFromAll_Click(object sender, EventArgs e) { row.SetState(0); row.LoadFrom(false, this);//该方法可以从各式各样的场景中批量获得值,如Json,entity,xml,dictionary等 row.ToTable().Bind(dgvRow); }