Пример #1
0
        private List<Control> GetControls(TableBasedDropDownField field, Size canvasSize)
        {
            string displayMember = field.TextColumnName.Trim();
            string valueMember;

            if (field is DDLFieldOfCodes)
            {
                valueMember = field.CodeColumnName.Trim();
                ((DDLFieldOfCodes)field).ControlFactory = this;
            }
            else if (field is DDListField)
            {
                valueMember = field.CodeColumnName.Trim();
                ((DDListField)field).ControlFactory = this;
            }
            else
            {
                valueMember = field.TextColumnName.Trim();
            }

            ComboBox comboBox = new Epi.Windows.Enter.Controls.LegalValuesComboBox();

            SetControlProperties(comboBox, field, canvasSize);

            if (field is DDListField)
            {
                comboBox.DropDownStyle = ComboBoxStyle.Simple;
            }
            else
            {
                comboBox.DropDownStyle = ComboBoxStyle.DropDown;
            }

            comboBox.Sorted = field.ShouldSort;

            if (!string.IsNullOrEmpty(displayMember))
            {
                comboBox.DisplayMember = null;
                comboBox.ValueMember = null;

                if (cachedListValues == null)
                {
                    cachedListValues = new Dictionary<string, DataTable>();
                }
                DataTable displayTable;
                if (cachedListValues.ContainsKey(displayMember + "," + field.SourceTableName))
                {
                    displayTable = cachedListValues[displayMember + "," + field.SourceTableName];
                }
                else
                {
                    displayTable = field.GetDisplayTable("", "", displayMember);
                    cachedListValues.Add(displayMember + "," + field.SourceTableName, displayTable);
                }

                if (displayTable != null)
                {
                    comboBox.BeginUpdate();
                    comboBox.Items.AddRange(displayTable.AsEnumerable().Select(row => row.Field<string>("Item") ?? string.Empty).ToArray());
                    comboBox.EndUpdate();

                    if (displayTable.Rows.Count > 0)
                    {
                        if (field.CurrentRecordValueObject == null || string.IsNullOrEmpty(field.CurrentRecordValueString))
                        {
                            comboBox.SelectedIndex = -1;
                        }
                        else
                        {
                            comboBox.SelectedItem = field.CurrentRecordValueString;
                        }
                    }
                }
            }

            Label prompt = GetPrompt(comboBox, field, canvasSize);
            List<Control> controls = new List<Control>();
            controls.Add(prompt);
            controls.Add(comboBox);

            field.Control = comboBox;

            if (!fieldControls.ContainsKey(field))
            {
                fieldControls.Add(field, controls);
            }
            else
            {
                fieldControls.Remove(field);
                fieldControls.Add(field, controls);
            }

            return controls;
        }