Exemplo n.º 1
0
        private void txtText_TextChanged(object sender, EventArgs e)
        {
            RFMTextBox txtField = (RFMTextBox)sender;

            txtField.Text = txtField.Text.ToUpper();
            txtField.Select(txtField.Text.Length, 0);
        }
Exemplo n.º 2
0
        private void txtCellAddress_TextChanged(object sender, EventArgs e)
        {
            RFMTextBox txtField        = (RFMTextBox)sender;
            int        sSelectionStart = txtField.SelectionStart;

            txtField.Text = txtField.Text.ToUpper();
            //txtField.Select(txtField.Text.Length, 0);
            txtField.Select(sSelectionStart, 0);
        }
Exemplo n.º 3
0
        private void txtCField_TextChanged(object sender, EventArgs e)
        {
            RFMTextBox s = (RFMTextBox)sender;

            if (s.Name.ToUpper().Contains("LINE"))
            {
                s.Text = s.Text.ToUpper();
            }

            btnAddressBuild_Click(null, null);
        }
Exemplo n.º 4
0
        private void frmSysEdit_Load(object sender, EventArgs e)
        {
            if (oDBTable.MainTableName == null || oDBTable.MainTableName.Length == 0)
            {
                RFMMessage.MessageBoxError("Не задана таблица...");
                return;
            }

            if (oDBTable.recordID == null)
            {
                oDBTable.recordID = 0;
            }

            oDBTable.FillNames();

            Text = "Таблица " + oDBTable.MainTableName + ((oDBTable.RusTableName.Length > 0) ? " (" + oDBTable.RusTableName + ")" : "");
            if (oDBTable.recordID.HasValue)
            {
                if ((int)oDBTable.recordID > 0)
                {
                    Text = Text + ", запись с кодом " + oDBTable.recordID.ToString();
                }
                else
                {
                    if ((int)oDBTable.recordID < 0)
                    {
                        Text = Text + ", копия записи";
                    }
                    else
                    {
                        Text = Text + ", новая запись";
                    }
                }
            }

            // структура таблицы
            oDBTable.GetStructure(false);

            // выбранная запись таблицы
            int nID = Math.Abs((int)oDBTable.recordID);

            oDBTable.GetRecordsList(nID, false);

            // переменные, которые нам понадобятся
            int      fieldsCount = oDBTable.TableStructure.Rows.Count;
            Object   value;
            string   tempValue, defaultValue, tempChar;
            int      rowNumber, columnNumber;
            string   fieldName, fieldDescription;
            bool     isFieldEnabled, isFieldNullAble, isNull;
            string   fieldTypeChar;
            int      maxLength, customLength, scale;
            string   identityFieldName;
            bool     isFKID; string tableNameFK;
            Graphics grafics_;

            // identity-поле
            identityFieldName = "";
            for (columnNumber = 0; columnNumber < fieldsCount; columnNumber++)
            {
                if (Convert.ToBoolean(oDBTable.TableStructure.Rows[columnNumber]["Is_Identity"]))
                {
                    identityFieldName = oDBTable.TableStructure.Rows[columnNumber]["FieldName"].ToString();
                    break;
                }
            }

            // сдвиг полей по вертикали и горизонтали
            int nShift  = lblForShift2.Top - lblForShift1.Bottom;
            int nCurTop = lblForShift1.Top;

            lblForShift1.Visible = false;
            lblForShift2.Visible = false;
            // длина/высота стд.метки с названием-описанием поля
            int nLabelLength = lblNull.Left - lblFields.Left - 1;
            int nLabelHeight = Convert.ToInt32(Math.Ceiling((new RFMLabel()).CreateGraphics().MeasureString("X", Font).Height));
            // длина/высота стд.текстового поля (с учетом правой полосы прокрутки)
            int nVScrollWidth  = (new VScrollBar()).Width;
            int nTextBoxLength = pnlData.Width - lblValues.Left - nShift - nVScrollWidth;
            int nTextBoxHeight = (new RFMTextBox()).Height;

            Control     control;
            RFMCheckBox controlCheckBox;
            RFMComboBox controlFK;

            // показываем описание полей и их значения: 1 строка - 1 поле
            for (rowNumber = 0; rowNumber < oDBTable.TableStructure.Rows.Count; rowNumber++)
            {
                DataRow rs = oDBTable.TableStructure.Rows[rowNumber];
                fieldName        = rs["FieldName"].ToString();
                fieldDescription = rs["FieldDescription"].ToString();
                fieldTypeChar    = rs["FieldTypeChar"].ToString();
                isFKID           = Convert.ToBoolean(rs["Is_FKID"]);
                isFieldNullAble  = Convert.ToBoolean(rs["Is_NullAble"]);
                if (rs["DefaultValue"] == DBNull.Value)
                {
                    defaultValue = null;
                }
                else
                {
                    defaultValue = rs["DefaultValue"].ToString();
                }
                maxLength    = Convert.ToInt32(rs["Max_Length"]);
                customLength = Convert.ToInt32(rs["Custom_Len"]);
                scale        = Convert.ToInt32(rs["Scale"]);

                value = null;                 // DBNull.Value

                if (nID == 0)
                {
                    // добавление
                    if (defaultValue == null)
                    {
                        if (isFieldNullAble)
                        {
                            value  = null;
                            isNull = true;
                        }
                        else
                        {
                            switch (fieldTypeChar)
                            {
                            case "L":
                                value = false;
                                break;

                            case "N":
                                value = 0;
                                break;

                            case "D":
                                value = DateTime.Now.Date;
                                break;

                            case "C":
                                value = "";
                                break;
                            }
                            isNull = false;
                        }
                    }
                    else
                    {
                        isNull = false;
                        // убираем скобки из значения по умолчанию
                        while (defaultValue.IndexOf("(") == 0)
                        {
                            defaultValue = defaultValue.Substring(1);
                        }
                        while (defaultValue.LastIndexOf(")") == defaultValue.Length - 1)
                        {
                            defaultValue = defaultValue.Substring(0, defaultValue.Length - 1);
                        }
                        switch (fieldTypeChar)
                        {
                        case "L":
                            if (defaultValue == "1")
                            {
                                value = true;
                            }
                            else
                            {
                                value = false;
                            }
                            break;

                        case "N":
                            try
                            {
                                value = Convert.ToDecimal(defaultValue);                                         // в зависимости от типа
                            }
                            catch { }
                            break;

                        case "D":
                            try
                            {
                                value = Convert.ToDateTime(defaultValue);
                            }
                            catch { }
                            break;

                        case "C":
                            if (defaultValue == "''")
                            {
                                defaultValue = "";
                            }
                            value = defaultValue;
                            break;
                        }
                        isNull = false;
                    }
                }
                else
                {
                    //редактирование
                    value = oDBTable.MainTable.Rows[0][fieldName];
                    if (value == DBNull.Value)
                    {
                        value  = null;
                        isNull = true;
                    }
                    else
                    {
                        isNull = false;
                    }
                }

                // доступно ли поле для ввода/редактирования
                if (bNoEdit)
                {
                    isFieldEnabled = false;
                }
                else
                {
                    if (Convert.ToBoolean(rs["Is_Identity"]) ||
                        Convert.ToBoolean(rs["Is_RowGuidCol"]) ||
                        Convert.ToBoolean(rs["Is_Computed"]) ||
                        "LNCD".IndexOf(fieldTypeChar) < 0)
                    {
                        isFieldEnabled  = false;
                        isFieldNullAble = false;
                    }
                    else
                    {
                        isFieldEnabled = true;
                    }
                }

                // название-описание поля, label
                RFMLabel lblTemp = new RFMLabel();
                lblTemp.Name   = "lbl" + fieldName;
                lblTemp.Text   = fieldDescription;
                lblTemp.Left   = lblFields.Left;
                lblTemp.Top    = nCurTop + (nTextBoxHeight - nLabelHeight) / 2;
                grafics_       = lblTemp.CreateGraphics();
                lblTemp.Width  = Convert.ToInt32(Math.Ceiling(grafics_.MeasureString(lblTemp.Text, Font).Width));
                lblTemp.Height = Convert.ToInt32(Math.Ceiling(grafics_.MeasureString(lblTemp.Text, Font).Height));
                if (lblTemp.Width > nLabelLength)
                {
                    lblTemp.Height = Convert.ToInt32(Math.Ceiling(lblTemp.Height * Math.Ceiling((decimal)lblTemp.Width / (decimal)nLabelLength))) + 1;
                    lblTemp.Width  = nLabelLength;
                }
                else
                {
                    lblTemp.AutoSize = true;
                }
                pnlData.Controls.Add(lblTemp);

                // ячейка под управление Null
                RFMCheckBox chkTemp = new RFMCheckBox();
                chkTemp.Name = "chkNull" + fieldName;
                if (isFieldNullAble)
                {
                    chkTemp.Checked = isNull;
                    chkTemp.Text    = (isNull) ? "Null" : " ";
                    chkTemp.Enabled = isFieldEnabled;
                }
                else
                {
                    chkTemp.Checked = false;
                    chkTemp.Enabled = false;
                    chkTemp.Visible = false;
                }
                chkTemp.Left     = lblNull.Left;
                chkTemp.AutoSize = true;
                chkTemp.Top      = nCurTop + (nTextBoxHeight - nLabelHeight) / 2;
                //AddHandler chkTemp.CheckedChanged, AddressOf chkNull_Changed;
                chkTemp.CheckedChanged += new System.EventHandler(chkNull_Changed);
                pnlData.Controls.Add(chkTemp);

                // ячейка для значения
                isFieldEnabled = (isFieldEnabled && !isNull);
                switch (fieldTypeChar)
                {
                case "L":
                    controlCheckBox = new RFMCheckBox();
                    if (isNull)
                    {
                        controlCheckBox.Checked = false;
                    }
                    else
                    {
                        if (value is Boolean)
                        {
                            controlCheckBox.Checked = Convert.ToBoolean(value);
                        }
                        else
                        {
                            if (value is String)
                            {
                                controlCheckBox.Checked = (value.ToString() == "1");
                            }
                        }
                    }
                    controlCheckBox.Text     = (controlCheckBox.Checked) ? "Да" : "Нет";
                    controlCheckBox.AutoSize = true;
                    //AddHandler .CheckedChanged, AddressOf chkL_Changed
                    controlCheckBox.CheckedChanged += new System.EventHandler(chkL_Changed);
                    control = controlCheckBox;
                    break;

                case "C":
                    RFMTextBox controlText = new RFMTextBox();
                    controlText.Font      = Font;
                    controlText.Multiline = true;
                    controlText.MaxLength = (maxLength > 0) ? maxLength : 1;
                    if (maxLength < 5)
                    {
                        tempChar = "W";
                    }
                    else
                    {
                        if (maxLength < 10)
                        {
                            tempChar = "M";
                        }
                        else
                        {
                            if (maxLength < 20)
                            {
                                tempChar = "O";
                            }
                            else
                            {
                                if (maxLength < 30)
                                {
                                    tempChar = "A";
                                }
                                else
                                {
                                    tempChar = "x";
                                }
                            }
                        }
                    }
                    tempValue = "";
                    for (int t = 1; t <= maxLength; t++)
                    {
                        tempValue += tempChar;
                    }
                    grafics_           = controlText.CreateGraphics();
                    controlText.Width  = Convert.ToInt32(Math.Ceiling(grafics_.MeasureString(tempValue, Font).Width)) + 1;
                    controlText.Height = Convert.ToInt32(Math.Ceiling(controlText.Height * Math.Ceiling((decimal)controlText.Width / (decimal)nTextBoxLength))) + 1;
                    if (controlText.Width > nTextBoxLength)
                    {
                        controlText.Width = nTextBoxLength;
                    }
                    controlText.Text = (value == null) ? "" : value.ToString();
                    control          = controlText;
                    break;

                case "N":
                    if (isFKID)
                    {
                        // код классификатора
                        RFMTextBox controlNText = new RFMTextBox();
                        controlNText.MaxLength = (customLength == 0) ? 1 : customLength;
                        tempChar  = "W";
                        tempValue = "";
                        for (int t = 1; t <= controlNText.MaxLength; t++)
                        {
                            tempValue += tempChar;
                        }
                        grafics_               = controlNText.CreateGraphics();
                        controlNText.Width     = Convert.ToInt32(Math.Ceiling(grafics_.MeasureString(tempValue, Font).Width));
                        controlNText.Text      = (value == null) ? " " : value.ToString();
                        controlNText.TextAlign = HorizontalAlignment.Right;
                        control = controlNText;
                    }
                    else
                    {
                        // числовое поле
                        RFMNumericUpDown controlNum = new RFMNumericUpDown();
                        controlNum.Minimum       = Int32.MinValue;
                        controlNum.Maximum       = Int32.MaxValue;
                        controlNum.Value         = Convert.ToDecimal(value);
                        controlNum.DecimalPlaces = scale;
                        controlNum.Width         = 100;
                        controlNum.TextAlign     = HorizontalAlignment.Right;
                        control = controlNum;
                    }
                    break;

                case "D":
                    RFMDateTimePicker controlDate = new RFMDateTimePicker();
                    controlDate.Value = (value == null) ? DateTime.Now.Date : Convert.ToDateTime(value);
                    grafics_          = controlDate.CreateGraphics();
                    controlDate.Width = Convert.ToInt32(Math.Ceiling(grafics_.MeasureString("".PadRight(10, '8'), Font).Width)) + nVScrollWidth;
                    control           = controlDate;
                    break;

                default:
                    RFMTextBox controlDefText = new RFMTextBox();
                    controlDefText.Text = "...данные...";
                    isFieldEnabled      = false;
                    control             = controlDefText;
                    break;
                }

                control.Name = "ctl" + fieldName;
                control.Left = lblValues.Left;
                control.Top  = nCurTop;

                pnlData.Controls.Add(control);

                control.Enabled = isFieldEnabled;

                if (control is RFMDateTimePicker && fieldTypeChar == "D" &&
                    isFieldNullAble && value == null)
                {
                    ((RFMDateTimePicker)control).HideControl(false);
                }

                if (control is RFMTextBox)
                {
                    if (controlFirst == null && control.Enabled)
                    {
                        controlFirst = (RFMTextBox)control;
                    }
                }

                // ячейка для классификатора
                if (isFKID)
                {
                    control.Enabled = false;
                    controlFK       = new RFMComboBox();
                    controlFK.Font  = Font;
                    controlFK.Name  = "cbo" + fieldName;
                    tableNameFK     = oDBTable.TableStructure.Rows[rowNumber + 1]["TableName"].ToString();
                    string tableNameFKinDS = tableNameFK + "_" + fieldName;
                    oDBTable.GetFKRecordsList(tableNameFK, tableNameFKinDS);
                    controlFK.DataSource    = oDBTable.DS.Tables[tableNameFKinDS];
                    controlFK.DisplayMember = oDBTable.DS.Tables[tableNameFKinDS].Columns[1].Caption;
                    controlFK.ValueMember   = oDBTable.DS.Tables[tableNameFKinDS].Columns[0].Caption;
                    controlFK.MaxLength     = maxLength = oDBTable.DS.Tables[tableNameFKinDS].Columns[1].MaxLength;
                    if (maxLength < 5)
                    {
                        tempChar = "W";
                    }
                    else
                    {
                        if (maxLength < 10)
                        {
                            tempChar = "M";
                        }
                        else
                        {
                            if (maxLength < 20)
                            {
                                tempChar = "O";
                            }
                            else
                            {
                                if (maxLength < 30)
                                {
                                    tempChar = "A";
                                }
                                else
                                {
                                    tempChar = "x";
                                }
                            }
                        }
                    }
                    tempValue = "";
                    for (int t = 1; t <= maxLength; t++)
                    {
                        tempValue += tempChar;
                    }
                    grafics_        = controlFK.CreateGraphics();
                    controlFK.Width = Convert.ToInt32(Math.Ceiling(grafics_.MeasureString(tempValue, Font).Width + nVScrollWidth));
                    controlFK.Left  = lblValues.Left + control.Width + nShift;
                    controlFK.Top   = nCurTop;
                    pnlData.Controls.Add(controlFK);
                    controlFK.Enabled = isFieldEnabled;
                    if (nID > 0 && value != DBNull.Value && Convert.ToInt32(value) > 0)
                    {
                        controlFK.SelectedValue = value;                         // именно так: сначала добавить control на форму, а потом присвоить ему значение
                    }
                    if (nID == 0)
                    {
                        controlFK.SelectedIndex = -1;
                    }
                    //AddHandler controlFK.SelectedIndexChanged, AddressOf cboField_SelectedIndexChanged
                    controlFK.SelectedIndexChanged += new System.EventHandler(cboField_SelectedIndexChanged);

                    rowNumber = rowNumber + 1;
                }

                nCurTop = Math.Max(lblTemp.Bottom, control.Bottom) + nShift;
            }
            // все контролы добавлены и заполнены

            // подравниваем форму (вместе с панелью) по кол-ву заполненных полей
            if (nCurTop < pnlData.Height)
            {
                MinimumSize = new Size(Size.Width, 200);
                Height      = Height - pnlData.Bottom + (pnlData.Top + nCurTop + nShift);
            }

            if ((int)oDBTable.recordID < 0)
            {
                oDBTable.recordID = 0;                 // копирование
            }

            //bLoaded = true;
        }