private WebDataSource GetMasterDataSource(WebDataSource owner) { if (string.IsNullOrEmpty(owner.MasterDataSource))//当前就是Master { return owner; } else { if (owner.MasterDataSource == owner.ID) { //MasterDataSource不能是自己本身,会造成死循环 throw new EEPException(EEPException.ExceptionType.PropertyInvalid, owner.GetType(), owner.ID, "MasterDataSource", owner.MasterDataSource); } Control parent = owner.Parent.FindControl(owner.MasterDataSource); if (parent == null) { //在Page上找不到MasterDataSrouce throw new EEPException(EEPException.ExceptionType.ControlNotFound, owner.GetType(), owner.ID, "WebDataSource", owner.MasterDataSource); } else if (parent is WebDataSource) { return GetMasterDataSource(parent as WebDataSource);//递归直到最顶层 } else { throw new EEPException(EEPException.ExceptionType.ControlTypeNotMatch,owner.GetType(), owner.ID, "WebDataSource", owner.MasterDataSource); } } }
private void doOkForGridInsert(WebGridView gridView, WebDataSource ds) { Hashtable ht = new Hashtable(); for (int i = 0; i < gridView.Columns.Count; i++) { string fieldName; if (gridView.Columns[i] is BoundField) { fieldName = ((BoundField)gridView.Columns[i]).DataField; if (!((BoundField)gridView.Columns[i]).ReadOnly) { TextBox txt = (TextBox)gridView.FooterRow.FindControl("InfoTextBox" + fieldName); if (txt != null) { if (txt.Text == "") { ht.Add(fieldName, DBNull.Value); } else { ht.Add(fieldName, txt.Text); } } } else { Label lbl = (Label)gridView.FooterRow.FindControl("InfoLabel" + fieldName); if (lbl != null) { if (lbl.Text == "") { ht.Add(fieldName, DBNull.Value); } else { ht.Add(fieldName, lbl.Text); } } } } else if (gridView.Columns[i] is TemplateField) { fieldName = gridView.Columns[i].SortExpression; object strValue = GetValue(fieldName, gridView); if (strValue == null || strValue.ToString() == "") //modified by lily 2007/4/12 如果多个Templatefield,且没有设定SortExpression,会报错。 { if (fieldName != null && fieldName != "") ht.Add(fieldName, DBNull.Value); } else ht.Add(fieldName, strValue); } } WebValidate validate = (WebValidate)gridView.ExtendedFindChildControl(gridView.DataSourceID, FindControlType.DataSourceID, typeof(WebValidate)); if (validate != null) { validate.Text = string.Empty; if (ds.PrimaryKey.Length > 0) { object[] value = new object[ds.PrimaryKey.Length]; for (int i = 0; i < ds.PrimaryKey.Length; i++) { string columnName = ds.PrimaryKey[i].ColumnName; if (ht.ContainsKey(columnName)) { value[i] = ht[columnName]; } else if (ds.RelationValues != null && ds.RelationValues.Contains(columnName)) { value[i] = ds.RelationValues[columnName]; } else { throw new EEPException(EEPException.ExceptionType.ColumnValueNotFound, ds.GetType(), ds.ID, columnName, null); } } if (!validate.CheckDuplicate(ds, value)) { gridView.ValidateFailed = true; return; } } bool validateSucess = validate.CheckValidate(ht); if (validateSucess) { gridView.ValidateFailed = false; ds.Insert(ht); gridView.GridInserting = false; gridView.OnAfterInsert(EventArgs.Empty); if (!gridView.TotalActive) gridView.ShowFooter = false; else gridView.DataBind(); } else { gridView.ValidateFailed = true; gridView.ValidateFormat(); } if (gridView.ValidateFailed) return; } else { ds.Insert(ht); gridView.GridInserting = false; gridView.OnAfterInsert(EventArgs.Empty); if (!gridView.TotalActive) gridView.ShowFooter = false; else gridView.DataBind(); } WebNavigator bindingNav = gridView.GetBindingNavigator(); if (bindingNav != null && bindingNav != this) { if (ds.AutoApply) { bindingNav.SetState(WebNavigator.NavigatorState.ApplySucess); bindingNav.SetNavState("Browsed"); } else { bindingNav.SetState(WebNavigator.NavigatorState.Changed); bindingNav.SetNavState("Changing"); } } if (ds.AutoApply) { this.SetState(WebNavigator.NavigatorState.ApplySucess); this.SetNavState("Browsed"); } else { this.SetState(WebNavigator.NavigatorState.Changed); this.SetNavState("Changing"); } }