protected override void OnRefresh(object sender, EventArgs args) { try { return; this._dataTableSet.Children.Clear(); DataSet ds = SqlHelper.ExecuteDataset(this.ConnectionString, CommandType.Text, this.Content); List <DBModelNode> modelNodeList = new List <DBModelNode>(); List <ColumnSetNode> columnSetNodeList = new List <ColumnSetNode>(); #region [构造ColumnSetNode ModelNode] foreach (DataTable dataTable in ds.Tables) { ColumnSetType columnSet = new ColumnSetType(); ColumnSetNode columnSetNode = new ColumnSetNode(); columnSetNode.Name = dataTable.TableName; columnSetNodeList.Add(columnSetNode); DBModelNode modelNode = new DBModelNode(); modelNode.Name = dataTable.TableName; modelNode.ColumnSetName = dataTable.TableName; modelNodeList.Add(modelNode); foreach (DataColumn dataColumn in dataTable.Columns) { ColumnNode columnNode = NodeFactory.CreateNode <ColumnNode>();// new ColumnNode(); columnNode.AllowDBNull = dataColumn.AllowDBNull; columnNode.DbType = SchemaUtility.GetDbType(DBGlobalService.DbType, dataColumn.DataType.Name).ToString(); columnNode.Description = ""; columnNode.IsPK = false; columnNode.Name = dataColumn.ColumnName; columnNode.Precision = 0; columnNode.Scale = 0; columnNode.Size = 0; columnNode.SystemType = dataColumn.DataType; columnNode.Parent = columnSetNode; FieldNode fieldNode = NodeFactory.CreateNode <FieldNode>();// new FieldNode(); fieldNode.Description = ""; fieldNode.Name = dataColumn.ColumnName; fieldNode.ColumnName = dataColumn.ColumnName; fieldNode.NullAble = dataColumn.AllowDBNull; fieldNode.SystemType = dataColumn.DataType; fieldNode.Parent = modelNode; } columnSetNode.Parent = this._dataTableSet; } #endregion var hasModel = from n in this._modelSet.Children join m in modelNodeList on ((DBModelNode)n).ColumnSetName equals m.ColumnSetName where n is DBModelNode select n; #region 更新存在的模型 foreach (DBModelNode modelNode in hasModel) { var columnSet = from colset in columnSetNodeList where colset.Name == modelNode.ColumnSetName select colset; ColumnSetNode csNode = columnSet.First(); foreach (BaseNode node in modelNode.Children) { FieldNode fieldNode = node as FieldNode; if (fieldNode == null) { continue; } if (string.IsNullOrWhiteSpace(fieldNode.ColumnName)) { continue; } var column = from col in csNode.Children where col.Name == fieldNode.Name select col; bool needModify = true; ColumnNode colNode = (ColumnNode)column.FirstOrDefault(); if (colNode != null && colNode.Name.Equals(fieldNode.ColumnName) && colNode.SystemType.Equals(fieldNode.SystemType) && colNode.AllowDBNull.Equals(fieldNode.NullAble)) { needModify = false; } fieldNode.OnColumnModify(needModify); } //添加不存在的字段 DBModelNode newModelNode = modelNodeList.Find((m) => { return(m.ColumnSetName.Equals(modelNode.ColumnSetName)); }); for (int i = 0; i < newModelNode.Children.Count; i++) { if (newModelNode.Children[i] is FieldNode) { FieldNode fNode = (FieldNode)newModelNode.Children[i]; var exsitNode = modelNode.Children.FirstOrDefault((n) => (n is FieldNode) && n.Name.Equals(fNode.Name) ); if (exsitNode == null) { fNode.Parent = null; modelNode.Children.Add(fNode); i--; } } } } #endregion #region 插入不存在的模型 var hasModelNameList = from n in hasModel select((DBModelNode)n).ColumnSetName; foreach (DBModelNode m in modelNodeList) { if (!hasModelNameList.Contains(m.ColumnSetName)) { m.Parent = this._modelSet; } } #endregion base.OnRefresh(sender, args); } catch (Exception ex) { MessageBox.Show("错误:" + ex.Message); } }