using MaiMuAOI.SysCtrl; using Models; using SqlSugar; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace MaiMuAOI.SysUI.ProductAndStep { public partial class ProductClassesFrm : Form { Service.ClassesService service = new Service.ClassesService(); List lstClasses = new List(); ValType valType; private int Tag; private bool saveExit = false; public ProductClassesFrm(int tag, string subject = "类别设置", ValType _valType = ValType.字符串) { InitializeComponent(); UIStyle.SetUIStyle(this); this.uiTitel1.FatherForm = this; this.Tag = tag; this.Text = subject; valType = _valType; dataGridView2.AutoGenerateColumns = false; //显示行号与列宽度自动调整 dataGridView2.RowHeadersVisible = true; dataGridView2.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders; dataGridView2.RowPostPaint += (sender, e) => { SysMgr.showRowNum_onDataGrid_RowPostPaint(this.dataGridView2, sender, e); }; } private void InitDataView() { //dataGridView2.Rows.Clear(); var exp1 = Expressionable.Create() .And(m => m.Tag == Tag) //.AndIF(dateTimePicker2.Checked, it => it.CreateTime < dateTimePicker2.Value) .ToExpression();//注意 这一句 不能少 lstClasses = service.GetList(exp1).OrderBy(m => m.Order).ToList(); if (lstClasses.Count < 1)//wlq 大坑:这个因为如果绑定数据源【list】是不为null但长度是0的 ,一旦点击新增 后 点击行就会抛出 索引为-1的相关错误。这个微软不知道咋设计的 { lstClasses.Insert(0, new Classes()); dataGridView2.DataSource = lstClasses; dataGridView2.DataSource = null; lstClasses.RemoveAt(0); } dataGridView2.DataSource = lstClasses;// new BindingSource(lstClasses, null); //for(int i=0;i string.IsNullOrWhiteSpace(m.Name)).Count() > 0) throw new Exception("请填写名称!"); bool result; var lstInsert = lstClasses.Where(m => m.Id == 0).ToList(); if (lstInsert.Count > 0) { result = service.InsertRange(lstInsert); if (!result) throw new Exception("保存失败!"); } var lstUpdate = lstClasses.Where(m => m.Id > 0).ToList(); if (lstUpdate.Count > 0) { result = service.UpdateRange(lstUpdate); if (!result) throw new Exception("保存失败!"); } MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); saveExit = true; this.DialogResult = DialogResult.OK; this.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void tsbtnExit_Click(object sender, EventArgs e) { this.Close(); } private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e) { int Index = this.dataGridView2.CurrentRow.Index;//获取当前选中行的索引 if (Index < this.dataGridView2.Rows.Count && this.dataGridView2.CurrentCell.Value.ToString() == "设置") { } } private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e) { try { var id = (int)dataGridView2.Rows[e.RowIndex].Cells["colId"].Value; var order = (int)dataGridView2.Rows[e.RowIndex].Cells["colOrder"].Value; var preValue = dataGridView2.Rows[e.RowIndex].Cells["colPreName"].Value.ToString(); if (dataGridView2.Rows[e.RowIndex].Cells["colName"].Value == null || dataGridView2.Rows[e.RowIndex].Cells["colName"].Value.ToString() == "") { dataGridView2.Rows[e.RowIndex].Cells["colName"].Value = preValue; return; } var value = dataGridView2.Rows[e.RowIndex].Cells["colName"].Value.ToString(); var count = lstClasses.Where(m => m.Id != id && m.Name == value.ToString()).Count(); if (count > 0) { if (!string.IsNullOrWhiteSpace(preValue)) dataGridView2.Rows[e.RowIndex].Cells["colName"].Value = preValue; else dataGridView2.Rows[e.RowIndex].Cells["colName"].Value = ""; throw new Exception("已存在相同名称!"); } // if (id == 0) { if (string.IsNullOrWhiteSpace(value)) return; var m = lstClasses[lstClasses.Count - 1]; lstClasses[lstClasses.Count - 1] = service.InsertReturnEntity(lstClasses[lstClasses.Count - 1]); //if (!result) // throw new Exception("保存失败!"); } else { if (value.Equals(preValue))//未修改 return; bool result = service.InsertOrUpdate(lstClasses[e.RowIndex]); if (!result) throw new Exception("保存失败!"); } dataGridView2.Rows[e.RowIndex].Cells["colPreName"].Value = dataGridView2.Rows[e.RowIndex].Cells["colName"].Value; } catch (Exception ex) { MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void tsbtnNew_Click(object sender, EventArgs e) { if (dataGridView2.EndEdit()) { //int index=dataGridView2.Rows.Add(); if (lstClasses.Count < 1 || lstClasses.Where(m => m.Id == 0).Count() < 1) { var model = new Classes() { Tag = this.Tag, Name = "", Order = lstClasses.Count, CreateUserCode = SysMgr.Instance.UserMgr.LoginUser.Code, ModifyUserCode = SysMgr.Instance.UserMgr.LoginUser.Code, }; lstClasses.Add(model); dataGridView2.DataSource = null; dataGridView2.DataSource = lstClasses; dataGridView2.Rows[dataGridView2.Rows.Count - 1].Selected = true; dataGridView2.CurrentCell = dataGridView2.Rows[dataGridView2.Rows.Count - 1].Cells["colName"]; this.dataGridView2.BeginEdit(true); } } } private void tsbtnDel_Click(object sender, EventArgs e) { try { if (!dataGridView2.EndEdit()) return; if (dataGridView2.SelectedRows.Count < 1) return; int index = dataGridView2.SelectedRows[0].Index; if (lstClasses[index].Id > 0) { if (!service.DeleteById(lstClasses[index].Id)) throw new Exception("删除失败,此项可能已被使用!"); } this.InitDataView(); } catch (Exception ex) { MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void dataGridView2_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) { //var list = ((BindingSource)dataGridView2.DataSource).DataSource as List; for (int i = 0; i < dataGridView2.Rows.Count; i++) { dataGridView2.Rows[i].Cells["colPreName"].Value = dataGridView2.Rows[i].Cells["colName"].Value; } } } }