winform下拉框多选控件(excel下拉菜单控件)
winform下拉框多选控件(excel下拉菜单控件),新营销网红网本栏目通过数据整理汇集了winform下拉框多选控件(excel下拉菜单控件)相关信息,下面一起看看。
在Winform的开发中,除了常规的单表信息输入,我们有时还会设计多个主从表的数据显示和编辑界面。单个表格的信息一般是控件和对象实体一一对应,然后调用API保存。主从表需要额外的特殊处理。摘要本文介绍了如何快速实现主从表编辑界面的处理,结合GridControl的GridView控件对象,可以非常方便地实现列表中数据的实时编辑。
一、主从表的界面设计与展示主从表一般涉及两个以上的表,一个是主表,一个是从表。在实际情况下,通常有两个表。这里分析处理两个表的主从表关系。
例如,我们建立两个报销申请单之间的关系,如下所示。
报销主从表信息可以列表显示,如下图界面所示,分为两部分一是主表信息,二是从表信息。点击主表信息,显示对应从表的列表信息。
然后,当我们增加一条主表记录时,可以弹出一个新的界面进行数据维护和处理,方便我们输入主表和从表的信息。界面如下所示。
界面包括两部分主表信息和从表信息(在GridView中实时录入),这样信息填写好后就可以提交了。
二。主从表编辑接口的处理这里主要介绍主从表编辑接口的处理,也就是上述接口的实现。
初始化GridView的代码如下。
///summary ///初始化schedule的GridView数据显示///summary private void initdetailgrid(){//初始清空this.gridView1.Columns.Clear()列;//设置一些列隐藏this . GridView 1 . create column( id , number )。可见=假;this . GridView 1 . create column( header _ id ,主表号)。可见=假;this . GridView 1 . create column( apply _ id ,申请表编号)。可见=假;//添加下拉列表列,绑定数据源this . GridView 1 . create column( FeeType , Expense Type ,100)。CreateCombobox()。BindDictitems(“支出类型”);//创建日期列,并指定格式var occultime=this . GridView 1 . Create column( occultime , occurrence time ,120)。createdatedit();发生时间。edit mask= yyyy-MM-DD hh :MM ;发生时间。display format . format string= yyyy-MM-DD hh :MM ;//创建一个数值列this.gridview1.createColumn(费用金额,费用金额)。CreateSpinEdit();//创建注释列this.gridview1.createColumn(费用描述,费用描述,200)。CreateMemoEdit();//初始化GridView,可以添加新列this . GridView 1 . init GridView(grid type . new item,false,editor show mode . mousedown focused, );//转义的列内容显示了这一点。GridView1CustomColumnDisplayText=New CustomColumnDisplayTextEventHandler(GridView 1 _ CustomColumnDisplayText);//处理单元格的样式this . GridView 1 . rowcell style=new rowcell style eventhandler(GridView 1 _ rowcell style);//头排序本;GridView1选项定制;不允许allowsort=false//绘制序号this . GridView 1 . customdrawrowindicator=(s,e)={ if(e . info . isrowmindicator e . row handle=0){ e . info . display text=(e . row handle 1)。tostring();}};//检查输入单元格是否为非零值。这个。GridView1validaterow=delegate(Object Sender,Validateroweventargs e){ var result=grid control 1。Validaterownull (e,New String[]{ FeeType });};//初始化新行this的内容。GridView1InitNewRow=(s,e)={GridView1。SetRowCellValue (e. rowhandle, id ,guid。newguid()。tostring());gridView1SetRowCellValue(例如,RowHandle, Header_ID ,tempInfo。ID);gridView1SetRowCellValu
e(e.RowHandle, "Apply_ID", tempInfo.Apply_ID);gridView1.SetRowCellValue(e.RowHandle, "OccurTime", DateTime.Now);};}void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e){GridView gridView = this.gridView1;if (e.Column.FieldName == "FeeAmount"){e.Appearance.BackColor = Color.Green;e.Appearance.BackColor2 = Color.LightCyan;}}void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e){string columnName = e.Column.FieldName;if (e.Column.ColumnType == typeof(DateTime)){if (e.Value != null){if (e.Value == DBNull.Value
Convert.ToDateTime(e.Value) = Convert.ToDateTime("1900-1-1")){e.DisplayText = "";}else{e.DisplayText = Convert.ToDateTime(e.Value).ToString("yyyy-MM-dd HH:mm");//yyyy-MM-dd}}}}
上面代码都有详细的备注,主要就是我们根据数据库表的关系,创建对应显示的字段即可,其中有需要隐藏的那么就不要显示(方便获取对应的值)
//设置部分列隐藏this.gridView1.CreateColumn("ID", "编号").Visible = false;this.gridView1.CreateColumn("Header_ID", "主表编号").Visible = false;this.gridView1.CreateColumn("Apply_ID", "申请单编号").Visible = false;
如果需要绑定下拉列表类似的字段,那么创建对应的数据类型,然后调用绑定函数绑定即可,如下面代码
//添加下拉列表列,并绑定数据源this.gridView1.CreateColumn("FeeType", "费用类型", 100).CreateComboBox().BindDictItems("费用类型");
如果是一些特殊的输入需要设置格式显示或者掩码,那么如下所示
//创建日期列并指定格式var OccurTime = this.gridView1.CreateColumn("OccurTime", "发生时间", 120).CreateDateEdit();OccurTime.EditMask = "yyyy-MM-dd HH:mm";OccurTime.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm";
有一个值得注意的就是我们新增一行从表记录的时候,需要记录一些主表的属性,这样的话,我们就是在行初始化的时候,赋值给从表的隐藏列即可。
//新增行的内容初始化this.gridView1.InitNewRow += (s, e) = {gridView1.SetRowCellValue(e.RowHandle, "ID", Guid.NewGuid().ToString());gridView1.SetRowCellValue(e.RowHandle, "Header_ID", tempInfo.ID);gridView1.SetRowCellValue(e.RowHandle, "Apply_ID", tempInfo.Apply_ID);gridView1.SetRowCellValue(e.RowHandle, "OccurTime", DateTime.Now);};
在界面中如果我们需要显示主表的信息,那么就根据条件获取对应的主表记录对象,然后显示给界面控件即可。
/// summary /// 显示常规的对象内容/// /summary /// param name="info" /param private void DisplayInfo(ReimbursementInfo info){tempInfo = info;//重新给临时对象赋值,使之指向存在的记录对象txtCategory.Text = info.Category;txtReason.Text = info.Reason;txtTotalAmount.Value = info.TotalAmount;txtNote.Text = info.Note;}
而保存的时候,我们把界面内容重新赋值给对应的主表对象。
/// summary /// 编辑或者保存状态下取值函数/// /summary /// param name="info" /param private void SetInfo(ReimbursementInfo info){info.Category = txtCategory.Text;info.Reason = txtReason.Text;info.TotalAmount = txtTotalAmount.Value;info.Note = txtNote.Text;info.ApplyDate = DateTime.Now;info.ApplyDept = base.LoginUserInfo.DeptId;info.CurrentLoginUserId = base.LoginUserInfo.ID;}
而我们需要获取GridView明细输入的时候,就通过一个函数遍历获取GridView的行记录,转换为相应的对象即可,如下所示。
/// summary /// 获取明细列表/// /summary /// returns /returns private List ReimbursementDetailInfo GetDetailList(){var list = new List ReimbursementDetailInfo for (int i = 0; i this.gridView1.RowCount; i++){var detailInfo = gridView1.GetRow(i) as ReimbursementDetailInfo;if (detailInfo != null){list.Add(detailInfo);}}return list;}
这样处理完这些信息后,我们就可以在主表保存的时候,保存明细表信息即可。
/// summary /// 新增状态下的数据保存/// /summary /// returns /returns public override bool SaveAddNew(){ReimbursementInfo info = tempInfo;//必须使用存在的局部变量,因为部分信息可能被附件使用SetInfo(info);info.Creator = base.LoginUserInfo.ID;info.CreateTime = DateTime.Now;try{#region 新增数据bool succeed = BLLFactory Reimbursement .Instance.Insert(info);if (succeed){//可添加其他关联操作var list = GetDetailList();foreach(var detailInfo in list){BLLFactory ReimbursementDetail .Instance.InsertUpdate(detailInfo, detailInfo.ID);}return true;}#endregion}catch (Exception ex){LogTextHelper.Error(ex);MessageDxUtil.ShowError(ex.Message);}return false;}
其中代码
BLLFactory ReimbursementDetail .Instance.InsertUpdate(detailInfo, detailInfo.ID);
可以对新增记录保存,也可以对存在的记录进行更新。
通过上面的介绍,我们可以看到不同的主从表其实逻辑还是很通用的,我们可以把它们的逻辑抽取出来,通过代码生成工具进行快速生成即可。
相关文章
豪杰超级解霸(还记得豪杰超级解霸吗?)
龚自珍的资料(清代诗人龚自珍一生功绩简介)
象牙塔是什么意思(“象牙塔”里怎么了?)
水色风信子(水培风信子容易养)
婧字怎么读
虞姬是哪里人(古代著名美人虞姬到底是哪里人?)
公办三本院校(我们还有哪些“三本”?)
电子酒柜(酒柜最全选购指南)
德州景点(德州市景区景点62个)
玉兰油官方网(OLAY发布高端臻粹系列)
驱鬼咒语(道教辟邪的神咒)
奥运五环代表什么(奥运会五环代表着什么?)
更多winform下拉框多选控件(excel下拉菜单控件)相关信息请关注本文章,本文仅仅做为展示!