界面图:
残缺代码: [数据库交互和一些工具类等疏忽 只看逻辑]
using System;using System.Collections.Generic;using System.Configuration;using System.Data;using System.Drawing;using System.IO;using System.Reflection;using System.Text;using System.Text.RegularExpressions;using System.Web.Script.Serialization;using System.Windows.Forms;using ess_zbfz_main.commonForm;using ess_zbfz_main.dto;using ess_zbfz_main.entity;using ess_zbfz_main.ifs;using ess_zbfz_main.util;using ess_zbfz_main.vo;using ess_zbfz_main.zhaobiao;using Newtonsoft.Json;using PublicLibrary;namespace ess_zbfz_main.baseInfoFrm{ public partial class FrmBzjAdd : Form,UploadCommonIFS { private static string sqliteDbName = ConfigurationManager.AppSettings["sqliteDBName"].ToString(); //数据库名称 private static string sqliteDbLocation = ConfigurationManager.AppSettings["sqliteDBLocation"].ToString(); //数据库寄存门路 //保留接口 internal static string apiSave = "oszbsupplierdeposit/save"; //更新附件信息 internal static string apiUpdateFile = "oszbsupplierdeposit/updateFile"; //以后的我的项目信息 private OsZbPurchaseProjectInfo currentProjectInfo; //保证金信息 private OsZbSupplierDeposit currentDeposit; //保证金详情信息 private List<OsZbSupplierDepositDetail> detailList; //标下拉 private List<ComboBoxVo> markList; //点击工夫 public DateTime clickTime; //以后行 private int currentRow =0; public FrmBzjAdd() { InitializeComponent(); } public FrmBzjAdd(OsZbPurchaseProjectInfo currentProjectInfo, OsZbSupplierDeposit osZbSupplierDeposit) { this.currentProjectInfo = currentProjectInfo; this.currentDeposit = osZbSupplierDeposit; InitializeComponent(); } private void FrmBzjAdd_Load(object sender, EventArgs e) { this.supplierName.Text = PublicVo.SupplyName; this.projectName.Text = currentProjectInfo.ProjectName; this.projectNo.Text = currentProjectInfo.ProjectNo; this.listDataGriddView.AutoGenerateColumns = false; //按键 this.totalMoney2.KeyPress += Main_KeyPress; this.totalInsure.KeyPress += Main_KeyPress; //失焦事件 this.totalMoney2.LostFocus += Main_LostFocus; this.totalInsure.LostFocus += Main_LostFocus; //02物资类到标段填写,01服务类到包填写 if (currentProjectInfo!=null && currentProjectInfo.PurchaseType == "02") { this.listDataGriddView.Columns["packName"].Visible = false; } LoadData(null); } private void Main_LostFocus(object sender, EventArgs e) { try { TextBox textBox = (TextBox)sender; string value = textBox.Text; if (value != null && value.ToString().EndsWith(".")) { string valueTxt = value.Substring(0, value.Length-1); textBox.Text = valueTxt; } if (!string.IsNullOrEmpty(this.totalMoney2.Text) && !string.IsNullOrEmpty(this.totalInsure.Text)) { decimal total = Decimal.Add(Convert.ToDecimal(this.totalMoney2.Text), Convert.ToDecimal(this.totalInsure.Text)); this.total.Text = total.ToString(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } private void Main_KeyPress(object sender, KeyPressEventArgs e) { try { TextBox textBox = (TextBox)sender; int start = textBox.SelectionStart; int len = textBox.SelectionLength; string text = ""; if (len > 0) { text = textBox.Text.Substring(0, start) + e.KeyChar.ToString() + textBox.Text.Substring(start + len - 1, textBox.Text.Length - start - len); } else { text = textBox.Text + e.KeyChar.ToString(); } string pattern = @"^([1-9]\d{0,12}|0)(\.\d{0,3})?$"; if ("\b".Equals(e.KeyChar.ToString()) || "\r".Equals(e.KeyChar.ToString()) || "\t".Equals(e.KeyChar.ToString())) { return; } if (!Regex.IsMatch(text, pattern)) { e.Handled = true; } } catch (Exception ex) { MessageBox.Show(ex.Message, "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } /// <summary> /// 加载数据 /// </summary> /// <param name="flag"></param> public void LoadData(string flag) { try { if(this.Owner is FrmBzj) { FrmBzj frmBzj= (FrmBzj)this.Owner; //刷新父窗口的办法 frmBzj.RefreshSelf(); } this.listDataGriddView.DataSource = null; //查问标下拉信息 string markComboboxSql = "select OS_ZB_PURCHASE_PROJECT_INFO.MARK_NO as keyValue,OS_ZB_PURCHASE_PROJECT_INFO.MARK_NAME as keyName from OS_ZB_PURCHASE_PROJECT_INFO where OS_ZB_PURCHASE_PROJECT_INFO.PROJECT_NO ='" + currentProjectInfo.ProjectNo + "' group by OS_ZB_PURCHASE_PROJECT_INFO.MARK_NO "; markList = SQLiteLibrary.SelectBySql<ComboBoxVo>(sqliteDbLocation, sqliteDbName, markComboboxSql); string defaultPattern = "yyyy-MM-dd"; DateUtil.SetDatePick(ref this.yxq, defaultPattern, true, DatePickChange); //批改页面 if (currentDeposit != null) { string mainSql = "SELECT OS_ZB_SUPPLIER_DEPOSIT.*,OS_ZB_PURCHASE_PROJECT_INFO.PROJECT_NAME,SYS_FILE_INFO.FILE_PATH FROM OS_ZB_SUPPLIER_DEPOSIT"; mainSql += " left join OS_ZB_PURCHASE_PROJECT_INFO ON OS_ZB_PURCHASE_PROJECT_INFO.PROJECT_NO =OS_ZB_SUPPLIER_DEPOSIT.PROJECT_NO"; mainSql += " left join SYS_FILE_INFO on SYS_FILE_INFO.ID =OS_ZB_SUPPLIER_DEPOSIT.ATTACH_ID "; mainSql += " where OS_ZB_SUPPLIER_DEPOSIT.id='" + currentDeposit.Id + "'"; List<OsZbSupplierDeposit> lists = SQLiteLibrary.SelectBySql<OsZbSupplierDeposit>(sqliteDbLocation, sqliteDbName, mainSql); currentDeposit = lists.Count > 0 ? lists[0] : null; if ("baodan".Equals(currentDeposit.VoucherCategory)) { currentDeposit.VoucherCategory = "保单"; } else if ("huikuan".Equals(currentDeposit.VoucherCategory)) { currentDeposit.VoucherCategory = "汇款"; } //给主页面局部设置信息 SetPageMainInfo(this.groupBox1, currentDeposit); //投保形式 不能批改 this.payWay.Enabled = false; this.AddRowBtn.Visible = currentDeposit.Sfanjn != "YES"; //上传的图片 if (!StringUtil.IsEmpty(currentDeposit.FilePath)) { currentDeposit.FilePath =LocalFileUtil.GetPath(currentDeposit.FilePath); Image image = new Bitmap(currentDeposit.FilePath); this.pictureBox1.Image =new Bitmap(image, 300, 300); } //this.pictureBox1.Image = new this.totalMoney2.Text = currentDeposit.TotalMoney; string secordSql = "select OS_ZB_SUPPLIER_DEPOSIT_DETAIL.*,OS_ZB_PURCHASE_PROJECT_INFO.MARK_NAME,'No' AS isAddRow from OS_ZB_SUPPLIER_DEPOSIT_DETAIL"; secordSql += " left join OS_ZB_SUPPLIER_DEPOSIT on OS_ZB_SUPPLIER_DEPOSIT.ID = OS_ZB_SUPPLIER_DEPOSIT_DETAIL.PARENT_ID"; secordSql += " left join OS_ZB_PURCHASE_PROJECT_INFO on OS_ZB_PURCHASE_PROJECT_INFO.PROJECT_NO = OS_ZB_SUPPLIER_DEPOSIT.PROJECT_NO and OS_ZB_SUPPLIER_DEPOSIT_DETAIL.MARK_NO = OS_ZB_PURCHASE_PROJECT_INFO.MARK_NO"; secordSql += " where OS_ZB_SUPPLIER_DEPOSIT_DETAIL.PARENT_ID = '" + currentDeposit.Id + "' group by OS_ZB_SUPPLIER_DEPOSIT_DETAIL.ID"; detailList = SQLiteLibrary.SelectBySql<OsZbSupplierDepositDetail>(sqliteDbLocation, sqliteDbName, secordSql); for (int i = 0; i < detailList.Count; i++) { detailList[i].DepositMoney = string.IsNullOrEmpty(detailList[i].DepositMoney) ? "0" : detailList[i].DepositMoney; detailList[i].TotalMoney = string.IsNullOrEmpty(detailList[i].TotalMoney) ? "0" : detailList[i].TotalMoney; detailList[i].DepositInsure = string.IsNullOrEmpty(detailList[i].DepositInsure) ? "0" : detailList[i].DepositInsure; } } else { this.panelActive.Visible = false; } //标的下拉选项 DataGridViewColumn dataGridViewColumn = this.listDataGriddView.Columns["markNo"]; if (dataGridViewColumn is DataGridViewComboBoxColumn) { DataGridViewComboBoxColumn comboBoxColum = (DataGridViewComboBoxColumn)dataGridViewColumn; ComboBoxVo comboBoxVo = new ComboBoxVo("", "请抉择"); markList.Insert(0, comboBoxVo); comboBoxColum.DataSource = markList; comboBoxColum.ValueMember = "keyName"; comboBoxColum.DisplayMember = "keyValue"; } detailList = detailList != null && detailList.Count > 0 ? detailList : new List<OsZbSupplierDepositDetail>(); detailList.Insert(0, new OsZbSupplierDepositDetail()); this.listDataGriddView.DataSource = detailList; // 移除空白项 this.listDataGriddView.DataSource = null;//必须要 detailList.RemoveAt(0); this.listDataGriddView.DataSource = detailList; if (detailList != null && detailList.Count>0) { this.listDataGriddView.Columns["packName"].DataPropertyName = "packName"; } } catch (Exception ex) { MessageBox.Show(ex.Message, "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } /// <summary> /// 主页面设置值 /// </summary> /// <param name="mainControl"></param> /// <param name="currentDeposit"></param> private void SetPageMainInfo(Control mainControl, OsZbSupplierDeposit currentDeposit) { var allControls = mainControl.Controls; for (int i = 0; i < allControls.Count; i++){ if (allControls[i] is TextBox || allControls[i] is DateTimePicker || allControls[i] is ComboBox) { SetControlValueByEntity(currentDeposit, currentDeposit.GetType(), allControls[i]); } if (allControls[i] is CheckBox) { ((CheckBox)allControls[i]).Checked = currentDeposit.Sfanjn == "YES"; } } } /// <summary> /// 给控件设置值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> /// <param name="type"></param> /// <param name="control"></param> private void SetControlValueByEntity<T>(T t, Type type, Control control) { string propName = StringUtil.UpperCaseFirst(control.Name); BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; PropertyInfo propertyInfo = type.GetProperty(propName, bindingFlags); if (propertyInfo != null) { object value =propertyInfo.GetValue(t); control.Text = value!=null?value.ToString():null; } /* else if (propertyInfo == null && "DepositInsure".Equals(propName))//保险可为0 { propertyInfo.SetValue(t, "0"); }*/ } /// <summary> /// 全选和全不选 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAllCheck_Click(object sender, EventArgs e) { string tag = this.btnAllCheck.Tag.ToString(); //完结编辑 this.listDataGriddView.EndEdit(); bool check = false; //全选 if (tag == "checkAll") { check = true; } int count = Convert.ToInt16(listDataGriddView.Rows.Count.ToString()); for (int i = 0; i < count; i++) { DataGridViewCheckBoxCell selectCheckCell = (DataGridViewCheckBoxCell)listDataGriddView.Rows[i].Cells["select_check"]; //bool flag = Convert.ToBoolean(selectCheckCell.Value); selectCheckCell.Value = check; } // if (tag == "checkAll") { this.btnAllCheck.Text = "全不选"; this.btnAllCheck.Tag = "unAllcheck"; this.btnAllCheck.Image = Properties.Resources.all_uncheck_20; this.btnAllCheck.Width += 6; } else { this.btnAllCheck.Text = "全选"; this.btnAllCheck.Tag = "checkAll"; this.btnAllCheck.Image = Properties.Resources.all_check_20; this.btnAllCheck.Width -= 6; } } /// <summary> /// 删除性能 --- UI删除行 不操作数据库 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDelete_Click(object sender, EventArgs e) { try { int count = Convert.ToInt16(listDataGriddView.Rows.Count.ToString()); //物理新增的行 List<int> deleteRows = new List<int>(); //绑定数据源的行 List<OsZbSupplierDepositDetail> dataSourceRows = new List<OsZbSupplierDepositDetail>(); for (int i = 0; i < count; i++) { if ((bool)listDataGriddView.Rows[i].Cells[0].EditedFormattedValue == true) { if (detailList!=null && detailList.Count> i) { dataSourceRows.Add(detailList[i]); } else { deleteRows.Add(i); } } } if (deleteRows.Count <= 0 && dataSourceRows.Count<=0) { MessageBox.Show("请抉择须要删除的数据", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } for (int i = 0; i < deleteRows.Count; i++) { //this.listDataGriddView.Rows. this.listDataGriddView.Rows.RemoveAt(deleteRows[i]); } for (int i = 0; i < dataSourceRows.Count; i++) { detailList.Remove(dataSourceRows[i]); } if (dataSourceRows.Count > 0) { this.listDataGriddView.DataSource = null;//必须要 this.listDataGriddView.DataSource = detailList; } //计算 CalMoney(-1); } catch (Exception ex) { MessageBox.Show("刪除异样,错误信息:" + ex.Message, "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } //刷新 private void btnRefesh_Click(object sender, EventArgs e) { LoadData(null); } /// <summary> /// 新增行事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void AddRowBtn_Click(object sender, EventArgs e) { object dataSource = this.listDataGriddView.DataSource; this.listDataGriddView.Enabled = false; //this.listDataGriddView.AllowUserToAddRows = true; //如果绑定了数据源 须要先勾销绑定 if (dataSource is List<OsZbSupplierDepositDetail>) { List<OsZbSupplierDepositDetail> detailList =(List<OsZbSupplierDepositDetail>)this.listDataGriddView.DataSource; OsZbSupplierDepositDetail detail = new OsZbSupplierDepositDetail(); detailList.Add(detail); this.listDataGriddView.DataSource = null; this.listDataGriddView.DataSource = detailList; } else { this.listDataGriddView.Rows.Add();//新增行 } this.listDataGriddView.Enabled = true; } /// <summary> /// 计算金额局部 /// </summary> private void CalMoney(int curRow) { try { int rowCount = this.listDataGriddView.Rows.Count; //行--保证金总额 Decimal rowTotal = new Decimal(); //顶部统计 保证金总额 保险总额 总金额 Decimal totalBzj = new Decimal(); Decimal totalBx = new Decimal(); Decimal total = new Decimal(); for (int i = 0; i < rowCount; i++) { rowTotal = AddCalByRows(this.listDataGriddView.Rows[i].Cells["depositMoney"], this.listDataGriddView.Rows[i].Cells["depositInsure"]); totalBzj = Decimal.Add(totalBzj, GetFormateValue(this.listDataGriddView.Rows[i].Cells["depositMoney"])); totalBx = Decimal.Add(totalBx, GetFormateValue(this.listDataGriddView.Rows[i].Cells["depositInsure"])); total = Decimal.Add(total, rowTotal); //扭转事件的触发行 【不须要设置curRow写-1】 if (curRow == i) { this.listDataGriddView.Rows[i].Cells["totalMoney"].Value = rowTotal; } } this.totalMoney2.Text = totalBzj.ToString(); this.totalInsure.Text = totalBx.ToString(); this.total.Text = total.ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message, "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); //throw; } } /// <summary> /// 计算两个单元格值的和 /// </summary> /// <param name="cell1"></param> /// <param name="cell2"></param> /// <returns></returns> private decimal AddCalByRows(DataGridViewCell cell1, DataGridViewCell cell2) { return Decimal.Add(GetFormateValue(cell1), GetFormateValue(cell2)); } /// <summary> /// 设置单元格的值 /// </summary> /// <param name="cell"></param> /// <returns></returns> private decimal GetFormateValue(DataGridViewCell cell) { Decimal val1 = Decimal.Zero; if (cell.Value != null) { val1 = Convert.ToDecimal(cell.Value.ToString()); } return val1; } //单元格批改结束 private void listDataGriddView_CellEndEdit(object sender, DataGridViewCellEventArgs e) { try { if (e.RowIndex < 0 || e.ColumnIndex<0) { return; } //计算 CalMoney(e.RowIndex); if (this.listDataGriddView.Columns[e.ColumnIndex].Name == "markNo") { DataGridViewCell dataGridViewCell = this.listDataGriddView.CurrentRow.Cells["markNo"]; object o = dataGridViewCell.Value; int markNoIndex =this.listDataGriddView.Columns["markName"].Index; this.listDataGriddView.CurrentRow.Cells["markName"].Value = o; this.listDataGriddView.UpdateCellValue(markNoIndex, e.RowIndex);// 强制更新这个单元格的数据 string markNo = ""; if (dataGridViewCell is DataGridViewComboBoxCell) { DataGridViewComboBoxCell.ObjectCollection objectCollection = ((DataGridViewComboBoxCell)dataGridViewCell).Items; for (int i = 0; i < objectCollection.Count; i++) { if (objectCollection[i] is ComboBoxVo && ((ComboBoxVo)objectCollection[i]).KeyName== o) { markNo = ((ComboBoxVo)objectCollection[i]).KeyValue; this.listDataGriddView.CurrentRow.Cells["markNo_R"].Value = markNo; } } } if (o != null && o.ToString() != null && !"请抉择".Equals(o.ToString())) { //分标名称 //查问标下拉信息 //+ " and OS_ZB_PURCHASE_PROJECT_INFO.SIGN_UP='YES' string packComboboxSql = "select OS_ZB_PURCHASE_PROJECT_INFO.PACK_NO as keyName,OS_ZB_PURCHASE_PROJECT_INFO.PACK_NAME as keyValue from OS_ZB_PURCHASE_PROJECT_INFO where OS_ZB_PURCHASE_PROJECT_INFO.MARK_NO ='" + markNo + "' order by PACK_NAME"; List<ComboBoxVo> packList = SQLiteLibrary.SelectBySql<ComboBoxVo>(sqliteDbLocation, sqliteDbName, packComboboxSql); DataGridViewColumn column = this.listDataGriddView.Columns["packName"]; if (column is DataGridViewComboBoxColumn) { DataGridViewComboBoxCell boxCell = new DataGridViewComboBoxCell(); DataGridViewComboBoxColumn comboBoxColum = (DataGridViewComboBoxColumn)column; List<string> pklist = new List<string>(); for (int i = 0; i < packList.Count; i++) { pklist.Add(packList[i].KeyValue); } if(pklist!=null && pklist.Count > 0) { pklist.Insert(0, "请抉择"); } else { pklist.Insert(0, "暂无数据"); } boxCell.DataSource = pklist; //boxCell.Value = e.RowIndex< detailList.Count?detailList[e.RowIndex].PackName:""; //分包信息 this.listDataGriddView.CurrentRow.Cells[3] = boxCell; } } } } catch (Exception ex) { MessageBox.Show(ex.Message, "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } /// <summary> /// 保留提交操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Click(object sender, EventArgs e) { R result = null; //完结编辑 this.listDataGriddView.EndEdit(); this.btnSave.Focus(); //this.totalMoney2.LostFocus; try { //主键id string primaryKey = System.Guid.NewGuid().ToString("N"); //批改 if (currentDeposit != null && currentDeposit.Id!=null) { primaryKey = currentDeposit.Id; } var controls = this.groupBox1.Controls; OsZbSupplierDeposit osZbSupplierDeposit = new OsZbSupplierDeposit(); for (int i = 0; i < controls.Count; i++) { if (controls[i] is TextBox || controls[i] is ComboBox || controls[i] is DateTimePicker) { SetValueByControl(osZbSupplierDeposit, osZbSupplierDeposit.GetType(), controls[i]); } } osZbSupplierDeposit.SupplierId = PublicVo.SupplyId; osZbSupplierDeposit.Id = primaryKey; osZbSupplierDeposit.TotalMoney = this.totalMoney2.Text; osZbSupplierDeposit.Sfanjn = this.sfanjn.Checked ? "YES" : "NO"; if (currentDeposit != null && currentDeposit.Id != null) { osZbSupplierDeposit.AttachId = currentDeposit.AttachId; } List<OsZbSupplierDepositDetail> detailList = GetDataGridInfo(primaryKey,true); if(osZbSupplierDeposit.Remark != null && osZbSupplierDeposit.Remark.Length > 500) { MessageBox.Show("备注内容长度最大为500个字符", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (osZbSupplierDeposit.Sfanjn!="YES" && detailList.Count <= 0) { MessageBox.Show("至多须要填写一条详情数据", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } //验证 MessageInfo<OsZbSupplierDepositDetail> messageInfo = VerifyUtil.Verify(detailList, "baozhengjin", true, ""); if (osZbSupplierDeposit.Sfanjn == "YES") { MessageInfo<OsZbSupplierDeposit> verifyMain = VerifyUtil.Verify(osZbSupplierDeposit, "baozhengjin"); if (verifyMain.ExistError) { messageInfo.ExistError = true; messageInfo.ErrorInfo = verifyMain.ErrorInfo+"\n"+messageInfo.ErrorInfo; } } Dictionary<string, string> checkRepeat = new Dictionary<string, string>(); StringBuilder sbfInfo = new StringBuilder(); string checkField1 = ""; string checkField2= ""; string checkMsg= currentProjectInfo.PurchaseType == "02"?"标":"包"; for (var i = 0; i < detailList.Count; i++) { //01 服务 02物资 物资类到标段填写,服务类到包填写 checkField1 = currentProjectInfo.PurchaseType == "02" ? detailList[i].MarkNo : (detailList[i].PackName=="请抉择"?"":detailList[i].PackName); checkField2 = currentProjectInfo.PurchaseType == "02" ? detailList[i].MarkNo : detailList[i].MarkNo + "-" + (detailList[i].PackName == "请抉择" ? "" : detailList[i].PackName); if (string.IsNullOrEmpty(checkField1)) { sbfInfo.Append($"第{i + 1}行 该{checkMsg}信息的未填写\n"); messageInfo.ExistError = true; } if (checkRepeat.ContainsKey(checkField2)) { sbfInfo.Append($"第{i + 1}行 该{checkMsg}信息的反复填写\n"); messageInfo.ExistError = true; } else { checkRepeat.Add(checkField2, ""); } } messageInfo.ErrorInfo += sbfInfo.ToString(); if (messageInfo.ExistError && !StringUtil.IsBlack(messageInfo.ErrorInfo)) { MessageBox.Show(messageInfo.ErrorInfo, "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } osZbSupplierDeposit.ListData = detailList; result = WebRequestUtil.PostBasicEntityDataApi(apiSave, osZbSupplierDeposit); if (!result.Successful) { MessageBox.Show(result.ResultHint, "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } string mainSql = ""; //批改 if (currentDeposit != null && currentDeposit.Id != null) { mainSql = SQLiteSqlUtils.CreateUpdateSql(osZbSupplierDeposit, new string[] { "id" }); //删除副表信息 string deleteDetailSql = "delete from OS_ZB_SUPPLIER_DEPOSIT_DETAIL where OS_ZB_SUPPLIER_DEPOSIT_DETAIL.PARENT_ID='"+ primaryKey + "'"; SQLiteLibrary.ExecuteSqlByTransaction(sqliteDbLocation, sqliteDbName, new string[] { mainSql, deleteDetailSql }); if (detailList != null && detailList.Count > 0) { string insertDetailSql = SQLiteSqlUtils.CreateInsertSql(detailList); SQLiteLibrary.insertData(sqliteDbLocation, sqliteDbName, insertDetailSql); } } else { //新增 mainSql = SQLiteSqlUtils.CreateInsertSql(osZbSupplierDeposit); SQLiteLibrary.insertData(sqliteDbLocation, sqliteDbName, mainSql); if (detailList!=null && detailList.Count > 0) { string insertDetailSql = SQLiteSqlUtils.CreateInsertSql(detailList); SQLiteLibrary.insertData(sqliteDbLocation, sqliteDbName,insertDetailSql); } } MessageBox.Show("保留胜利", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Information); LoadData(null); this.Hide(); this.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } /// <summary> /// 获取datagridView的值 /// </summary> /// <returns></returns> private List<OsZbSupplierDepositDetail> GetDataGridInfo(string relPrimaryKey,bool idAuto) { List<OsZbSupplierDepositDetail> detailList = new List<OsZbSupplierDepositDetail>(); try { DataGridView dataGridView = this.listDataGriddView; BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; PropertyInfo propertyInfo = null; int rowCount = dataGridView.Rows.Count; int columCount = dataGridView.Columns.Count; OsZbSupplierDepositDetail depositDetail = null; //行 for (int i = 0; i < rowCount; i++) { depositDetail = new OsZbSupplierDepositDetail(); //列 for (int k = 0; k < columCount; k++) { SetObjValue(depositDetail, depositDetail.GetType(), dataGridView.Columns[k].Name, dataGridView.Rows[i].Cells[k]); } //设置主键的值 if (!StringUtil.IsEmpty(relPrimaryKey)) { propertyInfo = depositDetail.GetType().GetProperty("ParentId", bindingFlags); if (propertyInfo != null) { propertyInfo.SetValue(depositDetail, relPrimaryKey); } } //注解主动设置 if (idAuto) { propertyInfo = depositDetail.GetType().GetProperty("Id", bindingFlags); if (propertyInfo != null) { propertyInfo.SetValue(depositDetail, System.Guid.NewGuid().ToString("N")); } } depositDetail.MarkNo = depositDetail.MarkNo_R; detailList.Add(depositDetail); } } catch (Exception ex) { MessageBox.Show(ex.Message, "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } return detailList; } /// <summary> /// datagridView 取值 封装成数组对象=== 一行一行的设置 /// </summary> /// <param name="depositDetail"></param> /// <param name="type"></param> /// <param name="name"></param> /// <param name="dataGridViewCell"></param> private void SetObjValue<T>(T t, Type type, string name, DataGridViewCell dataGridViewCell) { string propName = StringUtil.UpperCaseFirst(name); if (dataGridViewCell.Value != null) { string textValue = dataGridViewCell.Value.ToString(); BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; PropertyInfo propertyInfo = type.GetProperty(propName, bindingFlags); if (propertyInfo != null) { if ("DepositInsure".Equals(propName) && string.IsNullOrEmpty(textValue))//保险可为0 { propertyInfo.SetValue(t, "0"); } else { propertyInfo.SetValue(t, textValue); } } } else { if ("DepositInsure".Equals(propName))//保险可为0 { PropertyInfo propertyInfo = type.GetProperty(propName); propertyInfo.SetValue(t, "0"); } } } /// <summary> /// 给对象设置值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> /// <param name="type"></param> /// <param name="control"></param> private void SetValueByControl<T>(T t, Type type, Control control) { string propName = StringUtil.UpperCaseFirst(control.Name); string textValue = control.Text; BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; PropertyInfo propertyInfo = type.GetProperty(propName, bindingFlags); if (propertyInfo != null) { propertyInfo.SetValue(t, textValue); } else if (propertyInfo == null && "DepositInsure".Equals(propName))//保险可为0 { propertyInfo.SetValue(t, "0"); } } /// <summary> /// 从新定义编辑框 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void listDataGriddView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { e.Control.Controls.Clear(); int colum = this.listDataGriddView.CurrentCell.ColumnIndex; string columName = this.listDataGriddView.Columns[colum].Name; if(e.Control is DataGridViewTextBoxEditingControl) { if (columName == "payTime") { DateTimePicker btn = new DateTimePicker(); e.Control.Controls.Add(btn); btn.Dock = DockStyle.Fill; btn.Cursor = Cursors.Default; btn.Format = DateTimePickerFormat.Custom; btn.CustomFormat = "yyyy-MM-dd"; TableVo tableVo = new TableVo(this.listDataGriddView.CurrentCell.RowIndex, colum); btn.Tag = tableVo;//记录编辑的行和列 btn.ValueChanged += SetCellValue; var cellValue = this.listDataGriddView.CurrentCell.Value; //btn.MaxDate = DateTime.Now; string pattern = @"\d{4}[/-]\d{1,2}[/-]\d{1,2}"; Regex regex = new Regex(pattern); var defaultValue = DateTime.Now.ToString(); defaultValue = regex.IsMatch(defaultValue) ? regex.Match(defaultValue).Groups[0].ToString() : defaultValue; this.listDataGriddView.CurrentCell.Value = cellValue != null ? cellValue : defaultValue; btn.Value = Convert.ToDateTime(this.listDataGriddView.CurrentCell.Value.ToString()); //this.listDataGriddView.Rows[].Cells[this.listDataGriddView.CurrentColumn].Value = curValue; } else if ("depositMoney".Equals(columName) || "depositInsure".Equals(columName) || "totalMoney".Equals(columName)) { DataGridViewTextBoxEditingControl dgvTxt = (DataGridViewTextBoxEditingControl)e.Control; // 赋值 //dgvTxt.Name = columName; dgvTxt.KeyPress -= Cells_KeyPress; // 移除事件 //dgvTxt.SelectAll(); dgvTxt.KeyPress += Cells_KeyPress; // 绑定到事件 //先让编辑框聚焦 dgvTxt.Focus(); //设置光标的地位到文本尾 dgvTxt.Select(dgvTxt.TextLength, 0); //滚动到控件光标处 dgvTxt.ScrollToCaret(); } else { DataGridViewTextBoxEditingControl dgvTxt = (DataGridViewTextBoxEditingControl)e.Control; // 赋值 dgvTxt.KeyPress -= Cells_KeyPress; // 移除事件 } } } /// <summary> /// 自定义的日历 扭转值事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SetCellValue(object sender, EventArgs e) { DateTimePicker btn = (DateTimePicker)sender; if(btn.Tag is TableVo) { TableVo tableVo = (TableVo)btn.Tag; object value = btn.Value; string curValue = ""; Console.WriteLine("以后值:"+ value); if (value != null) { string pattern = @"\d{4}[/-]\d{1,2}[/-]\d{1,2}"; Regex regex = new Regex(pattern); curValue = btn.Value.ToString(); curValue = regex.IsMatch(curValue) ? regex.Match(curValue).Groups[0].ToString() : curValue; } this.listDataGriddView.Rows[tableVo.CurrentRow].Cells[tableVo.CurrentColumn].Value = curValue; } } private void Cells_KeyPress(object sender, KeyPressEventArgs e) { DataGridViewTextBoxEditingControl dgvTxt = (DataGridViewTextBoxEditingControl)sender; int start = dgvTxt.SelectionStart; int len = dgvTxt.SelectionLength; string text = ""; if (len > 0) { text = dgvTxt.Text.Substring(0, start) + e.KeyChar.ToString() + dgvTxt.Text.Substring(start + len - 1, dgvTxt.Text.Length - start - len); } else { text = dgvTxt.Text + e.KeyChar.ToString(); } string pattern = @"^([1-9]\d{0,12}|0)(\.\d{0,3})?$"; if ("\b".Equals(e.KeyChar.ToString()) || "\r".Equals(e.KeyChar.ToString()) || "\t".Equals(e.KeyChar.ToString())) { return; } if (!Regex.IsMatch(text, pattern)) { e.Handled = true; } } /// <summary> /// 行减少事件===>多级联动 [须要把dataPropetyName值移除] /// </summary> /// <param name="sender"></param> /// <param name="ev"></param> private void listDataGriddView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs ev) { if (ev.RowIndex == -1 || ev.RowCount == 0 || detailList== null) { return; } //Console.WriteLine("行数:------------" + ev.RowCount); int maxCount = detailList != null && detailList.Count > ev.RowCount ? detailList.Count : ev.RowCount; maxCount = ev.RowCount <= 1 ? ev.RowCount : maxCount; for (int i = 0; i < maxCount; i++) { string packComboboxSql = "select OS_ZB_PURCHASE_PROJECT_INFO.PACK_NO as keyName,OS_ZB_PURCHASE_PROJECT_INFO.PACK_NAME as keyValue from OS_ZB_PURCHASE_PROJECT_INFO where OS_ZB_PURCHASE_PROJECT_INFO.MARK_NO ='" + detailList[i].MarkNo + "' order by PACK_NAME"; List<ComboBoxVo> packList = SQLiteLibrary.SelectBySql<ComboBoxVo>(sqliteDbLocation, sqliteDbName, packComboboxSql); DataGridViewColumn column = this.listDataGriddView.Columns["packName"]; if (column is DataGridViewComboBoxColumn) { List<string> pklist = new List<string>(); for (int k = 0; k < packList.Count; k++) { pklist.Add(packList[k].KeyValue); } pklist.Insert(0, "请抉择"); DataGridViewComboBoxCell boxCell = new DataGridViewComboBoxCell(); boxCell.Value = detailList.Count <= currentRow ? "" : detailList[currentRow].PackName; Console.WriteLine("值:" + boxCell.Value); boxCell.DataSource = pklist; //分包信息 this.listDataGriddView.Rows[i].Cells["packName"] = boxCell; } } /* DataGridView dgv = (DataGridView)sender; Console.WriteLine("次数:------------"+ currentRow); currentRow++; //以后行 不能超过数据的最大行 if (ev.RowIndex < dgv.Rows.Count) { //&& detailList == null if (dgv.Columns[1].Name == "markNo") { string packComboboxSql = "select OS_ZB_PURCHASE_PROJECT_INFO.PACK_NO as keyName,OS_ZB_PURCHASE_PROJECT_INFO.PACK_NAME as keyValue from OS_ZB_PURCHASE_PROJECT_INFO where OS_ZB_PURCHASE_PROJECT_INFO.MARK_NO ='" + detailList[ev.RowIndex].MarkNo + "'"; List<ComboBoxVo> packList = SQLiteLibrary.SelectBySql<ComboBoxVo>(sqliteDbLocation, sqliteDbName, packComboboxSql); DataGridViewColumn column = this.listDataGriddView.Columns[2]; if (column is DataGridViewComboBoxColumn) { List<string> pklist = new List<string>(); for (int i = 0; i < packList.Count; i++) { pklist.Add(packList[i].KeyValue); } pklist.Insert(0, "请抉择"); DataGridViewComboBoxCell boxCell = new DataGridViewComboBoxCell(); boxCell.Value = detailList.Count <= currentRow ? "" : detailList[currentRow].PackName; Console.WriteLine("值:" + boxCell.Value); boxCell.DataSource = pklist; //分包信息 boxCell.Value = detailList[ev.RowIndex].PackName; this.listDataGriddView.Rows[ev.RowIndex].Cells[2] = boxCell; //detailList[ev.RowIndex].PackName; //currentRow++; } } }*/ } /// <summary> /// 单元格验证 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void listDataGriddView_CellValidated(object sender, DataGridViewCellEventArgs e) { DataGridViewColumn currentColum = this.listDataGriddView.Columns[e.ColumnIndex]; string columName= currentColum.Name; if("depositMoney".Equals(columName) || "depositInsure".Equals(columName) || "totalMoney".Equals(columName) ) { var value = this.listDataGriddView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; if(value!=null && value.ToString().EndsWith(".")) { this.listDataGriddView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = value.ToString().Substring(0, value.ToString().Length - 1); } } } /// <summary> /// 图片上传 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { UploadForm upload = new UploadForm(GetSelectType(), "文件|*.jpg;*.png;*bpm,*pdf;*PDF"); DialogUtil.ShowDialog(upload, this, 800, 500, new FormWindowProp(false, false, FormBorderStyle.FixedSingle)); } /// <summary> /// 下拉框信息[原经营异样名录==》变为企业信用查问报告 重大守法企业名单==》该类型删除] /// </summary> /// <returns></returns> private List<ComboBoxVo> GetSelectType() { List<ComboBoxVo> list = new List<ComboBoxVo>(); ComboBoxVo v0 = new ComboBoxVo("请抉择", ""); ComboBoxVo v1 = new ComboBoxVo("保单", "baodan", "文件|" + ConstantVo.FILE_TYPE_IMAGE_2); ComboBoxVo v3 = new ComboBoxVo("汇款", "huikuan", "文件|" + ConstantVo.FILE_TYPE_IMAGE_2); list.Add(v0); list.Add(v1); list.Add(v3); return list; } /// <summary> /// /// </summary> /// <param name="fileInfoList"></param> /// <param name="childCallBack">子页面回调办法</param> /// <returns></returns> public R CallBackUpload(List<FileInfoVo> fileInfoList, Action childCallBack) { R resultR = new R(); try { //上传完了写入数据库 FileInfoVo fileInfoVo = fileInfoList[0]; currentDeposit.AttachId = fileInfoVo.EnclosureId;//附件id currentDeposit.VoucherCategory = fileInfoVo.AttachType; SysFileInfo sysFile = new SysFileInfo(); util.ObjectUtil.CopyPop(fileInfoVo, ref sysFile); sysFile.Id = fileInfoVo.EnclosureId; //单纯的数据存储 resultR = WebRequestUtil.PostBasicEntityDataApi(apiUpdateFile, currentDeposit); if (!resultR.Successful) { MessageBox.Show(resultR.ResultHint, "提醒", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); return resultR; } //附件信息 SQLiteLibrary.insertData(sqliteDbLocation, sqliteDbName, SQLiteSqlUtils.CreateInsertSql(sysFile)); SQLiteLibrary.ExcuteSql(SQLiteSqlUtils.CreateUpdateSql(currentDeposit,new string[] {"id"})); resultR.Successful = true; //从新加载数据 LoadData(null); } catch (Exception ex) { MessageBox.Show(ex.Message, "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); return resultR; } finally { } return resultR; } /// <summary> /// 缴纳形式 选中扭转触发事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { ComboBox comboBox =(ComboBox)sender; this.sfanjn.Enabled = comboBox.SelectedItem.ToString() == "投保"; if(this.listDataGriddView.DataSource is List<OsZbSupplierDepositDetail>) { this.listDataGriddView.DataSource = detailList; } else { this.listDataGriddView.Rows.Clear(); this.listDataGriddView.DataSource = detailList; } //comboBox.SelectedItem.ToString() == "电汇" if (!this.sfanjn.Enabled) { this.sfanjn.Checked = false; this.yxq.Enabled = false; this.totalInsure.Text = ""; this.totalInsure.ReadOnly = true; this.totalMoney2.Text = ""; this.totalMoney2.ReadOnly = true; this.bdh.Text = ""; this.bdh.ReadOnly = true; this.listDataGriddView.Columns["depositInsure"].Visible = true; this.listDataGriddView.Columns["totalMoney"].Visible = true; this.listDataGriddView.Columns["depositMoney"].HeaderText = "总额-汇款(元)"; } if(comboBox.SelectedItem.ToString() == "电汇") { this.listDataGriddView.Columns["depositMoney"].HeaderText = "总额(元)"; this.listDataGriddView.Columns["depositInsure"].Visible = false; this.listDataGriddView.Columns["totalMoney"].Visible = false; } } private void dateTimePicker1_ValueChanged(object sender, EventArgs e) { } private void groupBox1_Enter(object sender, EventArgs e) { } /// <summary> /// 是否按年缴纳 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void sfanjn_CheckedChanged(object sender, EventArgs e) { CheckBox checkBox = (CheckBox)sender; if(checkBox.Checked && this.payWay.Text == "投保") { this.yxq.Enabled = true; this.totalInsure.ReadOnly = false; this.totalMoney2.ReadOnly = false; this.bdh.ReadOnly = false; this.AddRowBtn.Visible = false; this.btnAllCheck.Visible = false; this.btnDelete.Visible = false; if (this.listDataGriddView.DataSource is List<OsZbSupplierDepositDetail>) { this.listDataGriddView.DataSource = null; } else { this.listDataGriddView.Rows.Clear(); this.listDataGriddView.DataSource = null; } /*this.listDataGriddView.Rows.Clear(); this.listDataGriddView.DataSource = null;*/ } else { this.yxq.Enabled = false; this.totalInsure.Text = ""; this.totalInsure.ReadOnly = true; this.totalMoney2.Text = ""; this.totalMoney2.ReadOnly = true; this.bdh.Text = ""; this.bdh.ReadOnly = true; this.AddRowBtn.Visible = true; this.btnAllCheck.Visible = true; this.btnDelete.Visible = true; } } private void DatePickChange(object sender, EventArgs e) { DateTimePicker timePicker = (DateTimePicker)sender; timePicker.CustomFormat = "yyyy-MM-dd"; } private void totalMoney2_TextChanged(object sender, EventArgs e) { } private void listDataGriddView_CellClick(object sender, DataGridViewCellEventArgs e) { if(e.RowIndex <0 && e.ColumnIndex < 0) { return; } } /* /// <summary> /// 移除控件 某个注册事件 /// </summary> public void RemoveEvent(object eventObj) { KeyPressEventHandler keyPressEventHand = null; EventHandler eventHand = null; Delegate[] dels = null; if (eventObj is KeyPressEventHandler) { keyPressEventHand = (KeyPressEventHandler)eventObj; dels = keyPressEventHand.GetInvocationList(); } else if (eventObj is EventHandler) { eventHand = (EventHandler)eventObj; dels = eventHand.GetInvocationList(); } foreach (Delegate d in dels) { //失去办法名 object delObj = d.GetType().GetProperty("Method").GetValue(d, null); string funcName = (string)delObj.GetType().GetProperty("Name").GetValue(delObj, null); if (keyPressEventHand != null) { keyPressEventHand -= d as KeyPressEventHandler; } if (eventHand != null) { eventHand -= d as EventHandler; } } }*/ }}
外围代码分为四块:
1.加载数据 函数为 LoadData
2.点击新增行事件 函数为 AddRowBtn_Click
3.行新增事件【被动触发】 函数为 listDataGriddView_RowsAdded
4.单元格批改结束事件 函数为listDataGriddView_CellEndEdit
采坑1、数据绑定
listDataGriddView 是table的组件的name
this.listDataGriddView.DataSource 我抉择的是汇合, 已开始从数据库取出来空。只有这样的代码
this.listDataGriddView.DataSource = detailList; 如果detailList 是null 新增就能只能this.listDataGriddView.Rows.Add() 这个办法来新增行,
因为已开始的数据绑定就是个空 ,导致前面的新增 和删除 都要做判断 应用数据绑定和Rows 来新增和删除
【真的很麻烦】
这个因为如果绑定数据源【list】是不为null但长度是0的 ,一旦点击新增 后 点击行就会抛出 索引为-1的相干谬误。这个微软不晓得咋设计的。
采坑2、行事件触发bug
listDataGriddView_RowsAdded 的行新增触发的对象 有时候跟行数没有关系 感觉是外部机制的问题
所以:
int maxCount = detailList != null && detailList.Count > ev.RowCount ? detailList.Count : ev.RowCount; maxCount = ev.RowCount <= 1 ? ev.RowCount : maxCount; 这样能力避免汇合越界。
采坑3、新增行和删除行的欠缺
采纳数据绑定 就能把如图的代码省略调,然而这个新增行会有bug,点一次会呈现两行,咱们须要设置enabled 属性为false 禁止他主动新增行,
等新增完 再把enabled 属性改为true.
采纳数据绑定 就能把如图的代码省略调,不须要判断是物理增加还是绑定数据源 一把从数据源中删除 ,只用执行
this,listDataGriddView.DataSource =null;this,listDataGriddView.DataSource =detaiList;两行代码
采坑4:所有的单元格、列都用name 不要用下标 【不然业务一边动 就会出很多bug 因为下标变动的可能性很大 但name个别不会】
采坑5: 联动的值 要在数据加载后设置,不然一开始在设计界面就设置了 如下拉框就匹配不上 就间接报错了,如果不是下拉框可能没什么问题
如下面的界面图,标段编号和分包名称就是联动的,如果须要标段有值 还得应用this.listDataGriddView.UpdateCellValue(markNoIndex, e.RowIndex);
去更新曾经设置的标段内容。
采坑6: 事件外面的 控件事件绑定
/// <summary> /// 从新定义编辑框 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void listDataGriddView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { e.Control.Controls.Clear(); int colum = this.listDataGriddView.CurrentCell.ColumnIndex; string columName = this.listDataGriddView.Columns[colum].Name; if(e.Control is DataGridViewTextBoxEditingControl) { if (columName == "payTime") { DateTimePicker btn = new DateTimePicker(); e.Control.Controls.Add(btn); btn.Dock = DockStyle.Fill; btn.Cursor = Cursors.Default; btn.Format = DateTimePickerFormat.Custom; btn.CustomFormat = "yyyy-MM-dd"; TableVo tableVo = new TableVo(this.listDataGriddView.CurrentCell.RowIndex, colum); btn.Tag = tableVo;//记录编辑的行和列 btn.ValueChanged += SetCellValue; var cellValue = this.listDataGriddView.CurrentCell.Value; //btn.MaxDate = DateTime.Now; string pattern = @"\d{4}[/-]\d{1,2}[/-]\d{1,2}"; Regex regex = new Regex(pattern); var defaultValue = DateTime.Now.ToString(); defaultValue = regex.IsMatch(defaultValue) ? regex.Match(defaultValue).Groups[0].ToString() : defaultValue; this.listDataGriddView.CurrentCell.Value = cellValue != null ? cellValue : defaultValue; btn.Value = Convert.ToDateTime(this.listDataGriddView.CurrentCell.Value.ToString()); //this.listDataGriddView.Rows[].Cells[this.listDataGriddView.CurrentColumn].Value = curValue; } else if ("depositMoney".Equals(columName) || "depositInsure".Equals(columName) || "totalMoney".Equals(columName)) { DataGridViewTextBoxEditingControl dgvTxt = (DataGridViewTextBoxEditingControl)e.Control; // 赋值 //dgvTxt.Name = columName; dgvTxt.KeyPress -= Cells_KeyPress; // 移除事件 //dgvTxt.SelectAll(); dgvTxt.KeyPress += Cells_KeyPress; // 绑定到事件 //先让编辑框聚焦 dgvTxt.Focus(); //设置光标的地位到文本尾 dgvTxt.Select(dgvTxt.TextLength, 0); //滚动到控件光标处 dgvTxt.ScrollToCaret(); } else { DataGridViewTextBoxEditingControl dgvTxt = (DataGridViewTextBoxEditingControl)e.Control; // 赋值 //RemoveEvent(dgvTxt.KeyPress); //dgvTxt.Name = columName; dgvTxt.KeyPress -= Cells_KeyPress; // 移除事件 /* dgvTxt.KeyPress -= Cells_KeyPress; // 移除事件 dgvTxt.KeyPress -= Cells_KeyPress; // 移除事件 */ } }
如下面的代码 是绑定Cells_KeyPress,这是我为了该输出 标准输出数字用到的
前面造成单号和备注都只能输出数字 ,就是因为 KeyPress的事件累加绑定了
本文来源于:宋文超super,专属平台有csdn、思否(SegmentFault)、 简书、 开源中国(oschina)、掘金,转载请注明出处。