/// <summary> /// InitDataControl /// </summary> /// <param name="control"></param> /// <param name="nvcName"></param> /// <param name="nvNameViewer"></param> /// <param name="nvNameEditor"></param> /// <param name="editorFilter"></param> public static void InitDataControl(INameValueMappingBindingControl control, string nvcName, string nvNameViewer, string nvNameEditor, string editorFilter) { if (control == null) { throw new ArgumentNullException("control"); } if (string.IsNullOrEmpty(nvNameViewer)) { // 如果是 FreeComboBox,则nvNameViewer为空(不需要Datasource进行显示) nvNameViewer = nvNameEditor; } NameValueMapping nvViewer = NameValueMappingCollection.Instance[nvNameViewer]; control.ValueMember = nvViewer.ValueMember; control.DisplayMember = nvViewer.DisplayMember; NameValueMapping nvEditor = NameValueMappingCollection.Instance[nvNameEditor]; // 非动态,默认DataSet if (!nvEditor.IsDynamic) { nvcName = null; } control.SetDataBinding(nvcName, nvNameViewer, nvNameEditor, editorFilter); IGridDropdownControl gridControl = control as IGridDropdownControl; if (gridControl != null) { gridControl.VisibleColumns(nvViewer.MemberVisible); gridControl.AdjustDropDownControlSize(); } }
/// <summary> /// /// </summary> /// <param name="nvName"></param> /// <param name="value"></param> /// <returns></returns> public static string GetMultiString(string nvName, object value) { if (value == null) { return(string.Empty); } NameValueMapping nv = NameValueMappingCollection.Instance[nvName]; string valueMember = nv.ValueMember; string displayMember = nv.DisplayMember; string rawText = value.ToString(); StringBuilder sb = new StringBuilder(); string[] ss = rawText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); bool atFirst = true; foreach (string s in ss) { if (!atFirst) { sb.Append(","); } atFirst = false; sb.Append(NameValueMappingCollection.Instance.FindColumn2FromColumn1(nvName, valueMember, displayMember, s)); } return(sb.ToString()); }
/// <summary> /// /// </summary> /// <param name="nvName"></param> /// <param name="displayText"></param> /// <returns></returns> public static object GetMultiValue(string nvName, string displayText) { if (string.IsNullOrEmpty(displayText)) { return(null); } NameValueMapping nv = NameValueMappingCollection.Instance[nvName]; string valueMember = nv.ValueMember; string displayMember = nv.DisplayMember; string[] ss = displayText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); bool atFirst = true; if (ss.Length == 1) { return(NameValueMappingCollection.Instance.FindColumn2FromColumn1(nvName, displayMember, valueMember, ss[0])); } else { StringBuilder sb = new StringBuilder(); foreach (string s in ss) { if (!atFirst) { sb.Append(","); } atFirst = false; sb.Append(NameValueMappingCollection.Instance.FindColumn2FromColumn1(nvName, displayMember, valueMember, s)); } return(sb.ToString()); } }
protected virtual NameValueList OnGetItems(string name) { NameValueMapping nv = NameValueMappingCollection.Instance[name]; if (nv == null) { return(null); } var dv = NameValueMappingCollection.Instance.GetDataSource(name); NameValueList ret = new NameValueList { Name = name, NameValues = new Dictionary <string, string>() }; foreach (System.Data.DataRowView dvr in dv) { ret.NameValues[dvr[nv.ValueMember].ToString()] = dvr[nv.DisplayMember].ToString(); } return(ret); }
private static void ReloadNvFromEntity(EventProcessInfo eventProcessInfo, object sender, string changedDataControlName) { IDisplayManager dm; if (sender is IDisplayManager) { dm = sender as IDisplayManager; } else if (sender is ISearchManager) { dm = (sender as ISearchManager).DisplayManager; } else { return; } string[] columns = eventProcessInfo.ExecuteParam.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in columns) { string dsName = dm.Name; string nvName = s; string[] ss = s.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries); if (ss.Length > 1) { nvName = ss[1]; dsName = ss[0]; } NameValueMapping nv = NameValueMappingCollection.Instance[nvName]; // will throw 集合已改变Exception List <string> ls = new List <string>(); foreach (KeyValuePair <string, object> kvp in nv.Params) { ls.Add(kvp.Key.Substring(1)); } if (!ls.Contains(changedDataControlName)) { continue; } foreach (string key in ls) { object o = GetEntityValue(key, dm).Item2; nv.Params["@" + key] = o == null ? System.DBNull.Value : o; } NameValueMappingCollection.Instance.Reload(dsName, nvName); nv.ResetParams(); //switch (iInfo.CellEditorManager) //{ // case "Combo": // case "MultiCombo": // case "FreeCombo": // { // } // break; // case "ObjectPicker": // { // Feng.Windows.Forms.MyObjectPicker op = (idc as Feng.Windows.Forms.IWindowControl).Control as Feng.Windows.Forms.MyObjectPicker; // string exp = (string)ParamCreatorHelper.TryGetParam(iInfo.CellEditorManagerParamFilter); // exp = EntityHelper.ReplaceEntity(exp, new EntityHelper.GetReplaceValue(delegate(string paramName) // { // return GetEntityValue(paramName, dm).Second; // })); // op.DropDownControl.DisplayManager.SearchManager.LoadData(SearchExpression.Parse(exp), null); // } // break; // default: // throw new ArgumentException("EventProcess's SelectedDataValueChanged CellEditorManagerType is not support!"); //} } }
private static void ReloadNvFromDataControl(EventProcessInfo eventProcessInfo, IDisplayManager dm, IDataControl dc, string changedDataControlName) { string[] columns = eventProcessInfo.ExecuteParam.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in columns) { IDataControl idc = dm.DataControls[s]; if (idc == null) { throw new ArgumentException("there is no IDataControl with name " + s + " in eventProcess's SelectedDataValueChanged!"); } //object saveValue = idc.SelectedDataValue; GridColumnInfo iInfo = idc.Tag as GridColumnInfo; switch (iInfo.CellEditorManager) { case "Combo": case "MultiCombo": case "FreeCombo": { // NameValueMapping NameValueMapping nv = NameValueMappingCollection.Instance[iInfo.CellEditorManagerParam]; // will throw 集合已改变Exception List <string> ls = new List <string>(); foreach (KeyValuePair <string, object> kvp in nv.Params) { ls.Add(kvp.Key.Substring(1)); } if (!ls.Contains(changedDataControlName)) { continue; } object savedValue = idc.SelectedDataValue; idc.SelectedDataValue = null; foreach (string key in ls) { object o = GetDataControlValue(key, dm).Item2; nv.Params["@" + key] = o == null ? System.DBNull.Value : o; } NameValueMappingCollection.Instance.Reload(dm.Name, iInfo.CellEditorManagerParam); nv.ResetParams(); idc.SelectedDataValue = savedValue; } break; case "ObjectPicker": { object savedValue = idc.SelectedDataValue; idc.SelectedDataValue = null; Feng.Windows.Forms.MyObjectPicker op = (idc as Feng.Windows.Forms.IWindowControl).Control as Feng.Windows.Forms.MyObjectPicker; string exp = (string)ParamCreatorHelper.TryGetParam(iInfo.CellEditorManagerParamFilter); exp = EntityHelper.ReplaceEntity(exp, new EntityHelper.GetReplaceValue(delegate(string paramName) { return(GetDataControlValue(paramName, dm).Item2); })); op.DropDownControl.DisplayManager.SearchManager.LoadData(SearchExpression.Parse(exp), null); idc.SelectedDataValue = savedValue; } break; default: throw new ArgumentException("EventProcess's SelectedDataValueChanged CellEditorManagerType is not support!"); } //idc.SelectedDataValue = saveValue; } }
private static void ReloadNvFromGridCell(EventProcessInfo eventProcessInfo, IDisplayManager dm, Xceed.Grid.Cell cell, string changedDataControlName) { string[] columns = eventProcessInfo.ExecuteParam.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (string s in columns) { Xceed.Grid.Cell iCell = cell.ParentRow.Cells[s]; if (iCell == null) { continue; //throw new ArgumentException("there is no column with name " + s + "!"); } GridColumnInfo iInfo = iCell.ParentColumn.Tag as GridColumnInfo; switch (iInfo.CellEditorManager) { case "Combo": case "MultiCombo": case "FreeCombo": { NameValueMapping nv = NameValueMappingCollection.Instance[iInfo.CellEditorManagerParam]; List <string> ls = new List <string>(); foreach (KeyValuePair <string, object> kvp in nv.Params) { ls.Add(kvp.Key.Substring(1)); } if (!ls.Contains(changedDataControlName)) { continue; } iCell.Value = null; foreach (string key in ls) { object o = GetDataCellValue(key, iCell).Item2; nv.Params["@" + key] = o == null ? System.DBNull.Value : o; } NameValueMappingCollection.Instance.Reload(dm.Name, iInfo.CellEditorManagerParam); // when in grid, we can't use comboBox's DataTableChanged because combobox only created when in edit System.Data.DataView dv = NameValueMappingCollection.Instance.GetDataSource(dm.Name, iInfo.CellEditorManagerParam, iInfo.CellEditorManagerParamFilter); if (dv.Count == 1) { object toValue = dv[0][NameValueMappingCollection.Instance[iInfo.CellEditorManagerParam].ValueMember]; if (!Feng.Utils.ReflectionHelper.ObjectEquals(iCell.Value, toValue)) { dm.OnSelectedDataValueChanged(new SelectedDataValueChangedEventArgs(s, iCell)); } iCell.Value = toValue; } iCell.ReadOnly = (dv.Count == 0); nv.ResetParams(); } break; case "ObjectPicker": { // Todo: if (!ls.Contains(changedDataControlName)) iCell.Value = null; Feng.Windows.Forms.MyObjectPicker op = (iCell.CellEditorManager as Feng.Grid.Editors.MyObjectPickerEditor).TemplateControl; string exp = (string)ParamCreatorHelper.TryGetParam(iInfo.CellEditorManagerParamFilter); exp = EntityHelper.ReplaceEntity(exp, new EntityHelper.GetReplaceValue(delegate(string paramName) { return(GetDataCellValue(paramName, iCell).Item2); })); op.DropDownControl.DisplayManager.SearchManager.LoadData(SearchExpression.Parse(exp), null); } break; } } }
/// <summary> /// /// </summary> /// <param name="nvcName"></param> /// <param name="viewerName"></param> /// <param name="editorName"></param> /// <param name="editorFilter"></param> public void SetDataBinding(string nvcName, string viewerName, string editorName, string editorFilter) { if (NameValueMappingCollection.Instance[viewerName].ValueMember != NameValueMappingCollection.Instance[editorName].ValueMember) { throw new ArgumentException(viewerName + "'s ValueMember and " + editorName + "' ValueMember should be same!", "viewerName"); } string editTopNvName = NameValueMappingCollection.Instance.FindTopParentNv(editorName); //if (viewerName != editorName) //{ // string viewTopNvName = NameValueMappingCollection.Instance.FindTopParentNv(viewerName); // if (editTopNvName != viewTopNvName) // { // throw new ArgumentException(viewerName + "'s TopNv and " + editorName + "' TopNv should be same!"); // } //} this.m_nvcName = nvcName; this.m_editorNvName = editorName; this.m_layoutName = MyComboBox.GetGridNameForNv(viewerName + "_" + editorName + "_" + editorFilter, true); this.SetDataBinding(NameValueMappingCollection.Instance.GetDataSource(nvcName, viewerName, string.Empty), string.Empty); m_editTopNv = NameValueMappingCollection.Instance[editTopNvName]; // more call SetDataBinding m_editTopNv.DataSourceChanged -= new EventHandler(MyComboBox_DataTableChanged); m_editTopNv.DataSourceChanged += new EventHandler(MyComboBox_DataTableChanged); m_editTopNv.DataSourceChanging -= new System.ComponentModel.CancelEventHandler(MyComboBox_DataTableChanging); m_editTopNv.DataSourceChanging += new System.ComponentModel.CancelEventHandler(MyComboBox_DataTableChanging); if (viewerName != editorName || !string.IsNullOrEmpty(editorFilter)) { m_needFilter = true; m_filterData = NameValueMappingCollection.Instance.GetDataSource(nvcName, editorName, editorFilter); FilterEditRow(); } }