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); } }
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; }
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(); }
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); }