/// <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());
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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!");
                //}
            }
        }
Beispiel #6
0
        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;
            }
        }
Beispiel #7
0
        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();
            }
        }