• C#、devExpress 的 给bandedGrid加菜单功能 :复制、粘贴的例子(转)


    C#、devExpress 的 给bandedGrid加菜单功能 :复制、粘贴的例子
     

    CopyFromGrid

    PasteToGrid

    PasteNewRowsToGrid

     
    
           private void mnuPaste_Click(object sender, EventArgs e)
            {
                this.Cursor = Cursors.WaitCursor;
                //if(bandedGridView1.GetSelectedRows)
                int[] iSelRowIndexs=bandedGridView1.GetSelectedRows();
                if(iSelRowIndexs==null || iSelRowIndexs.Length==0)
                {
                    Common.DisplayMsg(this.Text,"先请选择需要范围");
                }else
                {
                    string sFieldName = bandedGridView1.FocusedColumn.FieldName;
                    if(sFieldName !=null)
                    {
                        if (sFieldName == "Discount" || sFieldName == "ProjectRating")
                            PasteToGrid(bandedGridView1, iSelRowIndexs[0], iSelRowIndexs.Length, sFieldName);
                    }
                }
                this.Cursor = Cursors.Default;
            }
     
            private void CopyFromGrid(DevExpress.XtraGrid.Views.BandedGrid.BandedGridView bandedGrid)
            {
                int[] iSelRowIndexs = bandedGridView1.GetSelectedRows();
                if(iSelRowIndexs ==null || iSelRowIndexs.Length==0)
                {
                    Common.DisplayMsg(this.Text,"请先选择需要复制的内容");
                    return;
                }
     
                DevExpress.XtraGrid.Columns.GridColumn[] gcs = null;
     
                Clipboard.Clear();
                StringBuilder sb = new StringBuilder();
                int iRow = 0;
                for (int iTemp = 0; iTemp < iSelRowIndexs.Length; iTemp++)
                {
                    iRow = iSelRowIndexs[iTemp];
                    gcs = bandedGridView1.GetSelectedCells(iRow);
                    foreach(DevExpress.XtraGrid.Columns.GridColumn gc in gcs)
                    {
                        sb.Append(bandedGridView1.GetRowCellValue(iRow, gc));
     
                        if (gc != gcs[gcs.Length - 1]) // 加上 tab符,除了最后一列外
                            sb.Append(Convert.ToChar(Keys.Tab));
                    }
     
                    if (iRow != iSelRowIndexs[iSelRowIndexs.Length - 1]) // 加上换行符。除了最后一行外
                        sb.Append(Convert.ToChar(Keys.Return));
                }
     
                Clipboard.SetText(sb.ToString()); 
            }
     
            // 这里暂时只有 decimal型数据,并且每次粘贴只有一列的
            // 要么是折扣列,要么是评估收视率列
            private void PasteToGrid(DevExpress.XtraGrid.Views.BandedGrid.BandedGridView bandedGrid,int iStartRowIndex,int iSelRowCount,string sFieldName)
            {
                string sClipBoard = Clipboard.GetText().TrimEnd('
    ').TrimEnd('
    '); // 去掉最后一个
    ;
                string[] aRow = sClipBoard.Split(Convert.ToChar(Keys.Return)); // 取得行
                string[] aCell = new string[1];
     
                if (aRow == null || aRow.Length == 0)
                {
                    Common.DisplayMsg(this.Text,"粘贴板没有数据");
                    return;
                }
     
                if (iSelRowCount != aRow.Length)
                {
                    Common.DisplayMsg(this.Text, "选择的数据行数与粘贴板的行数不匹配
    
    选择行数: " + iSelRowCount + "
    粘贴板行数: " + aRow.Length);
                    return;
                }
     
                decimal dTemp=0.0M;
                bool bResult = false;
                for (int i = 0; i < aRow.Length; i++)
                {
                    aCell = aRow[i].Split(Convert.ToChar(Keys.Tab));// 取得列
                    if (!Common.IsNullOrEmptyObject(aCell[0]))
                    {
                        bResult = Decimal.TryParse(aCell[0], out dTemp);
                        if (dTemp < 0) dTemp = 0;
                        if (sFieldName == "Discount")
                        {
                            if (dTemp == 0) dTemp = 100;
                            if (dTemp > 100) dTemp = 100;
                            if (dTemp > 0 && dTemp <= 1) dTemp = dTemp * 100;
                        }
                        bandedGrid.SetRowCellValue(iStartRowIndex + i, sFieldName, dTemp);
                    }
                    else
                    {
                        bandedGrid.SetRowCellValue(iStartRowIndex + i, sFieldName, 0);
                    }
                }
            }
     
            private void PasteNewRowsToGrid(DevExpress.XtraGrid.Views.BandedGrid.BandedGridView bandedGrid, string[] sFieldNames)
            {
                string sClipBoard = Clipboard.GetText().TrimEnd('
    ').TrimEnd('
    '); // 去掉最后一个
    ;
                string[] aRow = sClipBoard.Split(Convert.ToChar(Keys.Return)); // 取得行
                string[] aCell = new string[1];
     
                if (aRow == null || aRow.Length == 0)
                {
                    Common.DisplayMsg(this.Text,"粘贴板没有数据");
                    return;
                }
     
                if (sFieldNames.Length != aRow[0].Split(Convert.ToChar(Keys.Tab)).Length)
                {
                    Common.DisplayMsg(this.Text, "需要的列数与粘贴板的列数不匹配
    
    需要的列数: " + sFieldNames.Length + "
    粘贴板行数: " + aRow.Length);
                    return;
                }
     
                decimal dTemp=0.0M;
                int iTemp = 0;
                bool bResult = false;
                int iRowIndex = 0;
     
                int iMaxDaypartID = Common.GetMaxTableID(sqlHelper.ConnStringCPRP, "DaypartID", "Daypart");
     
                for (int i = 0; i < aRow.Length; i++)
                {
                    bandedGridView1.AddNewRow();
                    bandedGridView1.UpdateCurrentRow();
                    iRowIndex = bandedGridView1.RowCount - 1;
     
                    bandedGridView1.SetRowCellValue(iRowIndex, "DaypartID", ++ iMaxDaypartID);
     
                    if (! arrAddedDaypartID.Contains(iMaxDaypartID))
                    {
                        arrAddedDaypartID.Add(iMaxDaypartID);
                    }
     
                    aCell = aRow[i].Split(Convert.ToChar(Keys.Tab));// 取得列
                    for (int j = 0; j < aCell.Length; j++)
                    {
                        bResult = int.TryParse(aCell[0], out iTemp);
                        if (bResult)
                        {
                            bandedGridView1.SetRowCellValue(iRowIndex, bandedGridView1.Columns[sFieldNames[j]], iTemp);
                        }
                        else
                        {
                            bResult = Decimal.TryParse(aCell[0], out dTemp);
                            if (bResult)
                            {
                                bandedGridView1.SetRowCellValue(iRowIndex, bandedGridView1.Columns[sFieldNames[j]], dTemp);
                            }
                            else
                            {
                                bandedGridView1.SetRowCellValue(iRowIndex, bandedGridView1.Columns[sFieldNames[j]], aCell[j].Trim('
    '));
                            }
                        }
                    }
                }
            }
     
            // 
            private void mnuPaste2_Click(object sender, EventArgs e)
            {
                 this.Cursor = Cursors.WaitCursor;
     
                string[] sFieldNames = new string[] { "MediaName","StartTime","EndTime","Dayofweek","ProgramName","Position","Cost1","Cost2","Cost3" };
                PasteNewRowsToGrid(bandedGridView1,sFieldNames);
     
                this.Cursor = Cursors.Default;
            }
    

      

  • 相关阅读:
    ScaleFlux CSD 2000 在携程的应用实践
    Flex布局
    在 K8s 中快速部署使用 GitLab 并构建 DevOps 项目
    云原生爱好者周刊:Chaos Mesh 升级成为 CNCF 孵化项目
    Kubernetes 备份容灾服务产品体验教程
    云原生爱好者周刊:K8s Security SIG 发布 Kubernetes 策略管理白皮书
    云原生爱好者周刊:美国国家安全局发布网络安全指南
    放大招!青云企业级容器平台 QKCP 迎来重磅升级
    Kubernetes 新型容器逃逸漏洞预警
    用 KubeKey 快速离线部署 K8s 与 KubeSphere
  • 原文地址:https://www.cnblogs.com/lhyqzx/p/9345742.html
Copyright © 2020-2023  润新知