DevExpress的GridControl的行编辑

1、新增一行:如果数据源没有数据,就要添加一个新行

#region
            if (this.gvDetail.RowCount > 0)
            {
                this.gvDetail.UpdateCurrentRow();
            }
            DataTable dt = (DataTable)this.gridDetail.DataSource;
            if (dt == null)
            {
                dt = new DataTable();
                dt.Columns.Add("DETAILID");
                dt.Columns.Add("ROUTEORDER");
                dt.Columns.Add("PRODUCTID");
                dt.Columns.Add("PRODUCTNAME");
                dt.Columns.Add("SUBPRODUCTDEMANDDATE");
                dt.Columns.Add("SUBPRODUCTDEMANDDATENAME");
                dt.Columns.Add("CREATETIME");
                dt.Columns.Add("ISADD");
            }
            DataRow dr = dt.NewRow();
            dr["CREATETIME"] = DateTime.Now.ToString("yyyy/MM/dd HH:mm");//新增日期
            dr["ISADD"] = "Y";//新增行的标志

            dt.Rows.Add(dr);
            dtSubProductDataSource = dt.Copy();
            //dtSubProductBackUp = dt.Copy();
            this.gridDetail.DataSource = dt;
            this.gvDetail.RefreshData();
            this.gvDetail.FocusedRowHandle = this.gvDetail.RowCount - 1;
            this.gvDetail.FocusedColumn = this.gridColRouteOrder; //设置焦点列
            #endregion

2、删除一行:

if (this.gvDetail.GetSelectedRows().Length == 0)
            {
                MessageUtil.ShowTips("请选择一条需要删除的数据!");
                return;
            }
            DialogResult dialog = MessageUtil.ShowOKCancelTips("是否删除当前行?");
            if (dialog == DialogResult.Cancel) { return; }
            //获取是否新增的标志值
            string isAdd = CommonUtils.ObjectToString(this.gvDetail.GetRowCellValue(this.gvDetail.GetSelectedRows()[0], "ISADD"));
            if ("Y".Equals(isAdd))
            {
                //在界面新增的数据直接删除
                this.gvDetail.DeleteRow(this.gvDetail.GetSelectedRows()[0]);
                this.gvDetail.UpdateCurrentRow();
            }
            else
            {
                //从后台取出来的数据,删除时先保存在proGroupDetailDeletedModel ,点击保存以后再从数据库删除
                string detialId = this.gvDetail.GetRowCellValue(this.gvDetail.GetSelectedRows()[0], "DETAILID").ToString(); //
                ProductGroupDetail proDetial = new ProductGroupDetail();
                proDetial.DetailID = Int32.Parse(detialId);
                proGroupDetailDeletedModel.Add(proDetial);

                //删除数据源中的数据
                this.gvDetail.DeleteRow(this.gvDetail.GetSelectedRows()[0]);
                this.gvDetail.UpdateCurrentRow();
                dtSubProductDataSource.AcceptChanges();  //刷新数据源,表格的数据删除后,数据源会自动刷新
            }

3、循环遍历所有行,获取表格的值:

private bool JudeDetailData(out List<ProductGroupDetail> detailList)
        {
            #region
            bool result = false;
            string message = "";
            detailList = new List<ProductGroupDetail>();//返回的列表
            if (this.gvDetail.RowCount <= 0)
            {
                MessageUtil.ShowTips("没有添加!");
                return false;
            }
            try
            {
                int rowCount = this.gvDetail.RowCount;
                string routeOrderList = ",";//存放所有的,用于判断是否重复
                string subProductIdList = ",";//存放所有的,用于判断是否重复
                for (int i = 0; i < rowCount; i++)
                {
                    ProductGroupDetail detail = new ProductGroupDetail();
                    DataRow dr = this.gvDetail.GetDataRow(i);
                    string isadd = dr["ISADD"].ToString();
                    detail.IsAdd = isadd;
                    //获取
                    if (!"Y".Equals(isadd))
                    {
                        detail.DetailID = Int32.Parse(dr["DETAILID"].ToString());
                    }
                    //
                    string routeOrder = dr["ROUTEORDER"].ToString();
                    if (routeOrder.Length <= 0)
                    {
                        message += "第" + (i+1).ToString() + "行的不能为空";
                        this.gvDetail.FocusedRowHandle = i;
                        this.gvDetail.FocusedColumn = this.gvDetail.Columns[""];
                        break;
                    }
                    //判断是否重复
                    if (routeOrderList.IndexOf("," + routeOrder + ",") > -1)
                    {
                        message += "第" + (i + 1).ToString() + "行的不能重复";
                        this.gvDetail.FocusedRowHandle = i;
                        break;
                    }
                    detail.RouteOrder = Int32.Parse(routeOrder);
                    routeOrderList += routeOrder + ",";
                    //
                    string subProductId = dr["PRODUCTID"].ToString();
                    string subProductName = dr["PRODUCTNAME"].ToString();
                    if (subProductId.Length <= 0 || subProductName.Length<=0)
                    {
                        message += "第" + (i + 1).ToString() + "行不能为空";
                        this.gvDetail.FocusedRowHandle = i;
                        break;
                    }
                    //判断是否重复
                    if (subProductIdList.IndexOf("," + subProductId + ",") > -1)
                    {
                        message += "第" + (i + 1).ToString() + "行的不能重复";
                        this.gvDetail.FocusedRowHandle = i;
                        break;
                    }
                    detail.SubProductID = Int32.Parse(subProductId);
                    subProductIdList += subProductId + ",";
                    //
                    string subMandDate = dr["SUBPRODUCTDEMANDDATE"].ToString();
                    if (subMandDate.Length <= 0)
                    {
                        message += "第" + (i + 1).ToString() + "行的不能为空";
                        this.gvDetail.FocusedRowHandle = i;
                        break;
                    }
                    detail.SubProductDemandDate = Int32.Parse(subMandDate);
                    detailList.Add(detail);
                }
            }
            catch (Exception ex)
            {
                message = "获取异常:" + ex.Message;
            }
            //返回值
            if (message.Length > 0)
            {
                MessageUtil.ShowTips(message);
                result = false;
            }
            else
            {
                result = true;
            }
            return result;
            #endregion
        }

4、行编辑的下拉框:要实现的方法


        //表格编辑下拉框,在列SUBPRODUCTDEMANDDATE 绑定key值
        private void cbDemandDate_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBoxEdit comboBoxEdit = (ComboBoxEdit)sender;
            ComboxInfo comboxInfo = (ComboxInfo)comboBoxEdit.SelectedItem;
            this.gvDetail.SetFocusedRowCellValue(this.gvDetail.Columns["SUBPRODUCTDEMANDDATE"], comboxInfo.Code);
        }
        //表格编辑下拉框,在列PRODUCTID 绑定id值
        private void cbSubProductName_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBoxEdit comboBoxEdit = (ComboBoxEdit)sender;
            ComboxInfo comboxInfo = null;
            if (comboBoxEdit.SelectedItem != null && comboBoxEdit.SelectedItem.ToString().Length > 0)
            {
                comboxInfo = (ComboxInfo)comboBoxEdit.SelectedItem;
                this.gvDetail.SetFocusedRowCellValue(this.gvDetail.Columns["PRODUCTID"], comboxInfo.Code);
                this.gvDetail.SetFocusedRowCellValue(this.gvDetail.Columns["PRODUCTNAME"], comboxInfo.Name);
            }
            else
            {
                MessageUtil.ShowTips("输入的值不存在!");
                this.gvDetail.SetFocusedRowCellValue(this.gvDetail.Columns["PRODUCTID"], "");
            }
        }

        //表格中使用下拉框控件时必须要实现的事件使用
        private void repositoryItemComboBox_ParseEditValue(object sender, ConvertEditValueEventArgs e)
        {
            try
            {
                e.Value = CommonUtils.ObjectToString(e.Value);
                e.Handled = true;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

GridControl光标定位到某一个单元格:

  this.gridView1.FocusedRowHandle = 1;//行标
            this.gridView1.FocusedColumn = this.dictCode;//某一列
            this.gridView1.ShowEditor();//打开行编辑

GridControl添加按钮列:

把列的ColumnEdit属性设置为RepositoryItemButtonEdit

   把TextEditStyle属性设置为HideTextEditor;
   把Buttons的Kind属性设置为Glyph;

  把Button的Caption用于设置文字
   把Buttons的TextOption的Appearance的HAlignment属性设置为Near;
  

ButtonStyle设置为Office2003;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值