コード例 #1
0
        private void InitComponents()
        {
            string[] visibleColumnNames = (from kn in StockInfoViewMetaData.KeyNames
                                           where kn.Visible == true
                                           select kn.Name).ToArray();

            //初始化
            this.toolStripComboBoxSelect1.Items.Add("无");
            this.toolStripComboBoxSelect1.Items.AddRange(visibleColumnNames);
            this.toolStripComboBoxSelect1.SelectedIndex = 0;


            //初始化表格
            var worksheet = this.reoGridControlComponen.Worksheets[0];

            worksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Row;
            for (int i = 0; i < StockInfoViewMetaData.KeyNames.Length; i++)
            {
                worksheet.ColumnHeaders[i].Text      = StockInfoViewMetaData.KeyNames[i].Name;
                worksheet.ColumnHeaders[i].IsVisible = StockInfoViewMetaData.KeyNames[i].Visible;
            }
            worksheet.Columns = StockInfoViewMetaData.KeyNames.Length;//限制表的长度
            Console.WriteLine("表格行数:" + StockInfoViewMetaData.KeyNames.Length);

            this.tableLayoutPanel2.Controls.Clear();
            for (int i = 0; i < StockInfoCheckTicksModifyMetaDate.KeyNames.Length; i++)
            {
                KeyName curKeyName = StockInfoCheckTicksModifyMetaDate.KeyNames[i];
                if (curKeyName.Visible == false && curKeyName.Editable == false)
                {
                    continue;
                }
                Label label = new Label();
                label.Text = curKeyName.Name;
                this.tableLayoutPanel2.Controls.Add(label);

                TextBox textBox = new TextBox();
                textBox.Name = "textBox" + curKeyName.Key;
                if (curKeyName.Editable == false)
                {
                    textBox.Enabled = false;
                }
                this.tableLayoutPanel2.Controls.Add(textBox);
            }
        }
コード例 #2
0
        private void FormRecieptTicketItemsModify_Load(object sender, EventArgs e)
        {
            this.tableLayoutPanelTextBoxes.Controls.Clear();
            for (int i = 0; i < ReceiptMetaData.itemsKeyName.Length; i++)
            {
                KeyName curKeyName = ReceiptMetaData.itemsKeyName[i];
                if (curKeyName.Visible == false && curKeyName.Editable == false)
                {
                    continue;
                }
                Label label = new Label();
                label.Text = curKeyName.Name;
                this.tableLayoutPanelTextBoxes.Controls.Add(label);

                TextBox textBox = new TextBox();
                textBox.Name = "textBox" + curKeyName.Key;
                if (this.formMode == FormMode.ALTER && curKeyName.Editable == false)
                {
                    textBox.Enabled = false;
                }
                else if (this.formMode == FormMode.ADD)
                {
                    textBox.Enabled = curKeyName.Editable;
                }
                //Console.WriteLine("{0}  {1}", label.Text, textBox.Name);

                this.tableLayoutPanelTextBoxes.Controls.Add(textBox);
            }
            if (this.formMode == FormMode.ALTER)
            {
                ReceiptTicketItemView receiptTicketItemView = (from s in this.wmsEntities.ReceiptTicketItemView
                                                               where s.ID == this.receiptTicketItemID
                                                               select s).Single();
                Utilities.CopyPropertiesToTextBoxes(receiptTicketItemView, this);
            }
            //this.Controls.Find("textBoxReceiptTicketID", true)[0].Enabled = false;
            //this.Controls.Find("textBoxReceiptTicketID", true)[0].Text = this.receiptTicketID.ToString();
            this.Controls.Find("textBoxComponentNo", true)[0].Click    += textBoxComponentID_Click;
            this.Controls.Find("textBoxComponentName", true)[0].Enabled = false;
        }
コード例 #3
0
        public static void CreateEditPanel(TableLayoutPanel tableLayoutPanel, KeyName[] keyNames)
        {
            //初始化属性编辑框
            tableLayoutPanel.SuspendLayout();
            tableLayoutPanel.Controls.Clear();
            for (int i = 0; i < keyNames.Length; i++)
            {
                KeyName curKeyName = keyNames[i];
                if (curKeyName.Visible == false && curKeyName.Editable == false)
                {
                    continue;
                }
                Label label = new Label();
                label.Text     = curKeyName.Name;
                label.Dock     = DockStyle.Fill;
                label.Font     = new Font("微软雅黑", 10);
                label.AutoSize = true;

                tableLayoutPanel.Controls.Add(label);

                //如果是编辑框形式
                if (curKeyName.ComboBoxItems == null && curKeyName.GetAllValueToComboBox == null)
                {
                    TextBox textBox = new TextBox();
                    textBox.Font = new Font("微软雅黑", 10);

                    //设置了默认值,就添加事件,更改文字后文字变成黑色。默认值在后面统一填入
                    if (curKeyName.DefaultValueFunc != null)
                    {
                        textBox.TextChanged += (obj, e) =>
                        {
                            textBox.ForeColor = Color.Black;
                        };
                    }

                    //如果设置了占位符,则想办法给它模拟出一个占位符来。windows居然不支持,呵呵
                    if (curKeyName.EditPlaceHolder != null)
                    {
                        //加一个label覆盖在上面,看着跟真的placeholder似的
                        Label labelLayer = new Label();
                        labelLayer.Text      = curKeyName.EditPlaceHolder;
                        labelLayer.ForeColor = Color.Gray;
                        labelLayer.Font      = textBox.Font;
                        labelLayer.AutoSize  = true;
                        labelLayer.Click    += (obj, e) =>
                        {
                            textBox.Focus();
                            //调用编辑框的点击事件
                            MethodInfo onClickMethod = typeof(TextBox).GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
                            onClickMethod.Invoke(textBox, new object[] { EventArgs.Empty });
                            return;
                        };

                        textBox.Controls.Add(labelLayer);

                        //防止第一次显示的时候有字也显示占位符的囧境
                        textBox.TextChanged += (obj, e) =>
                        {
                            if (textBox.Text.Length != 0)
                            {
                                labelLayer.Hide();
                            }
                            else
                            {
                                textBox.Text = "";
                                labelLayer.Show();
                            }
                        };

                        textBox.Click += (obj, e) =>
                        {
                            labelLayer.Hide();
                            textBox.SelectAll();
                        };
                        textBox.Leave += (obj, e) =>
                        {
                            if (string.IsNullOrWhiteSpace(textBox.Text))
                            {
                                textBox.Text = "";
                                labelLayer.Show();
                            }
                        };
                    }
                    textBox.Name = "textBox" + curKeyName.Key;
                    if (curKeyName.Editable == false)
                    {
                        textBox.ReadOnly = true;
                    }
                    textBox.Dock = DockStyle.Fill;
                    //textBox.MouseEnter += (obj, e) =>
                    //{
                    //    textBox.Focus();
                    //    textBox.SelectAll();
                    //};
                    tableLayoutPanel.Controls.Add(textBox);
                }
                else //否则是下拉列表形式
                {
                    if (curKeyName.Editable == false && curKeyName.GetAllValueToComboBox != null)
                    {
                        throw new Exception("KeyName " + curKeyName.Name + "的GetAllValueToComboBox只能用于可编辑的下拉框(Editable必须为true)");
                    }
                    ComboBox comboBox = new ComboBox();
                    comboBox.Name = "comboBox" + curKeyName.Key;
                    if (curKeyName.ComboBoxItems != null)
                    {
                        comboBox.Items.AddRange(curKeyName.ComboBoxItems);
                    }
                    else if (curKeyName.GetAllValueToComboBox != null)
                    {
                        string[] segments = curKeyName.GetAllValueToComboBox.Split('.');
                        if (segments.Length != 2)
                        {
                            throw new Exception("KeyName的GetAllValueToComboBox属性必须是\"表名.列名\"格式!");
                        }
                        string tableName  = segments[0];
                        string columnName = segments[1];
                        comboBox.VisibleChanged += (obj, e) =>
                        {
                            List <string> allValues = new List <string>(Utilities.GetAllValues(tableName, columnName));
                            foreach (ComboBoxItem item in comboBox.Items)
                            {
                                allValues.Remove(item.Text);
                            }
                            comboBox.Items.AddRange((from value in allValues
                                                     select new ComboBoxItem(value)).ToArray());
                        };
                    }
                    if (comboBox.Items.Count > 0)
                    {
                        comboBox.SelectedIndex = 0;
                    }
                    if (curKeyName.Editable == false)
                    {
                        comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
                    }
                    else
                    {
                        comboBox.DropDownStyle = ComboBoxStyle.DropDown;
                    }
                    comboBox.Dock = DockStyle.Fill;
                    comboBox.Font = new Font("微软雅黑", 10);
                    tableLayoutPanel.Controls.Add(comboBox);
                }
            }
            FillTextBoxDefaultValues(tableLayoutPanel, keyNames);
            tableLayoutPanel.ResumeLayout();
        }
コード例 #4
0
        public static bool CopyTextToProperty <T>(string text, string propertyName, T targetObject, KeyName[] keyNames, out string errorMessage)
        {
            Type         objType = typeof(T);
            PropertyInfo p       = objType.GetProperty(propertyName);

            if (p == null)
            {
                throw new Exception("你的对象" + objType.Name + "里没有" + propertyName + "这个属性!检查一下你的代码吧!");
            }

            KeyName keyName = (from kn in keyNames where kn.Key == p.Name select kn).FirstOrDefault();

            if (keyName == null)
            {
                throw new Exception(objType.Name + "的KeyNames中不存在" + p.Name + ",请检查你的代码!");
            }
            string chineseName = keyName.Name;

            Type originType = p.PropertyType;

            if (string.IsNullOrWhiteSpace(text) && keyName.NotNull == true)
            {
                errorMessage = chineseName + " 不允许为空!";
                return(false);
            }
            decimal decimalValue;

            if (keyName.NotNegative && decimal.TryParse(text, out decimalValue))
            {
                if (decimalValue < 0)
                {
                    errorMessage = chineseName + "不允许为负数!";
                    return(false);
                }
            }
            if (keyName.Positive && decimal.TryParse(text, out decimalValue))
            {
                if (decimalValue <= 0)
                {
                    errorMessage = chineseName + "必须大于0!";
                    return(false);
                }
            }
            //如果文本框的文字为空,并且数据库字段类型不是字符串型,则赋值为NULL
            if (string.IsNullOrWhiteSpace(text) && originType != typeof(string))
            {
                if (IsNullableType(originType))
                {
                    p.SetValue(targetObject, null, null);
                    errorMessage = null;
                    return(true);
                }
                else
                {
                    errorMessage = chineseName + " 不允许为空!";
                    return(false);
                }
            }
            //根据源类型不同,将编辑框中的文本转换成合适的类型
            if (originType == typeof(string))
            {
                if (text.Length > 64)
                {
                    errorMessage = chineseName + " 长度不允许超过64个字";
                    return(false);
                }
                p.SetValue(targetObject, text, null);
            }
            else if (originType == typeof(int?) || originType == typeof(int))
            {
                try
                {
                    p.SetValue(targetObject, int.Parse(text), null);
                }
                catch
                {
                    errorMessage = chineseName + " 只接受整数值";
                    return(false);
                }
            }
            else if (originType == typeof(decimal) || originType == typeof(decimal?))
            {
                try
                {
                    decimal value = decimal.Parse(text);
                    if (value > 1e17M || value < -1e17M)
                    {
                        errorMessage = chineseName + " 数值过大,请重新输入";
                        return(false);
                    }
                    p.SetValue(targetObject, value, null);
                }
                catch
                {
                    errorMessage = chineseName + " 只接受数值类型";
                    return(false);
                }
            }
            else if (originType == typeof(DateTime?) || originType == typeof(DateTime))
            {
                try
                {
                    DateTime dt = DateTime.Parse(text);
                    if (dt < new DateTime(1753, 1, 1) || dt > new DateTime(9999, 12, 31, 23, 59, 59))
                    {
                        errorMessage = chineseName + " 请填写合适的日期";
                        return(false);
                    }
                    p.SetValue(targetObject, dt, null);
                }
                catch
                {
                    errorMessage = chineseName + " 只接受日期字符串 年-月-日 (时:分:秒 可选)";
                    return(false);
                }
            }
            else
            {
                errorMessage = "内部错误:未知源类型 " + originType;
                return(false);
            }

            errorMessage = null;
            return(true);
        }