<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      【Talk is cheap. Show me the code.】 公眾號如有回復不及時的,麻煩點擊聯系關于我-聯系博主,微信我。謝謝!
      老帥哥

      Stephen-kzx的博客

      【Talk is cheap. Show me the code.】【公眾號如有回復不及時的,麻煩點擊聯系關于我-聯系博主,微信我。謝謝!】

      玩轉控件:對Dev中GridControl控件的封裝和擴展

          又是一年清明節至,細雨綿綿猶如淚光,樹葉隨風擺動....

              轉眼間,一年又過去了三分之一,疫情的嚴峻讓不少企業就跟清明時節的樹葉一樣,搖搖欲墜。裁員的裁員,降薪的降薪,996的996~~說起來都是淚,以上種種竟然在本公司都能見到,然而你現在還能看到博主翹著二郎腿,在工位上信誓旦旦的敲著代碼也是奇跡!哎,生活不易,且行且珍惜吧!

        Talk is Cheap, Show me the code!

        如上所說,雖環境如此嚴峻,但也不能生疏了咱吃飯的手藝。不禁讓我感受到,對技術的追求,不僅僅靠的是興趣,更重要的是堅持啊!

        廢話少說,前面幾個環節,博主分享了對基礎控件的封裝和擴展(舉了幾個栗子,大家可以舉一反三。或者公眾號Call我,源碼免費奉上。),后面和大家一起看看對容器控件的封裝和擴展,本篇以常用的Dev中GridControl控件的封裝和擴展。

        對容器控件的封裝和擴展,和其他控件一樣。首先,新建一個自定義類,讓其繼承Dev的GridControl:

       public class KzxGridControl : GridControl, IControl

          其次,給需要擴展的屬性用特性方式標識,便于在VS設計界面來控制。本篇以最常用的兩個功能來進行解析——GridControl右鍵菜單之復制行和導出Excel.具體核心代碼如下:

      private bool _displayRightClickCopyMenu = true;
      private bool _displayRightClickExportExcel = true;
      /// <summary>
      /// 是否顯示右鍵菜單的復制行
      /// </summary>
      [Category("右鍵菜單"), Description("DisplayRightClickMenu,顯示右鍵菜單的復制行按鈕"), Browsable(true)]
      public bool DisplayRightClickMenu
      {
          get { return _displayRightClickCopyMenu; }
          set { _displayRightClickCopyMenu = value; }
      }
      /// <summary>
      /// 是否顯示右鍵菜單的導出Excel
      /// </summary>
      [Category("右鍵菜單"), Description("DisplayRightExportExcel,顯示右鍵菜單的導出Excel按鈕"), Browsable(true)]
      public bool DisplayRightExportExcel
      {
          get { return _displayRightClickExportExcel; }
          set { _displayRightClickExportExcel = value; }
      }

         編譯后,返回設計界面,點擊GridControl控件查看屬性窗體會發現我們剛剛新增的擴展屬性:

         屬性設置完畢后,接下來就是初始化綁定該菜單的功能事件。

      /// <summary>
      /// 構造
      /// </summary>
      public KzxGridControl()
          : base()
      {
          if (this.MainView == null)
          {
              this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
              ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
              ((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
              this.SuspendLayout();
              this.gridView1.GridControl = this;
              this.gridView1.Name = "gridView1";
              this.gridView1.VertScrollVisibility = ScrollVisibility.Always;
              this.gridView1.HorzScrollVisibility = ScrollVisibility.Always;
              this.MainView = this.gridView1;
              this.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
          this.gridView1});
              ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
              ((System.ComponentModel.ISupportInitialize)(this)).EndInit();
              this.ResumeLayout(false);
          }
      
          this._KzxBandedGridView = new KzxBandedGridView(false, _bandedGridView, this);
          this.Load += new EventHandler(GridControl_Load);
      }

        構造函數中,綁定load事件,用于觸發菜單事件

              
      private void GridControl_Load(object sender, EventArgs e)
      { 
          ToolStripItem item3;
          ToolStripItem item4; 
      
          if (this.ContextMenuStrip == null)
          {
              this.ContextMenuStrip = new ContextMenuStrip();
          }
          this._ContextMenuStrip = this.ContextMenuStrip;
          _ContextMenuStrip.Opened += _ContextMenuStrip_Opened;
          //如果需要顯示右鍵復制行
          if (_displayRightClickCopyMenu)
          {
              item3 = this._ContextMenuStrip.Items.Add(GetLanguage("RMI000452", "復制行"));//復制行
              item3.Name = "copyline";
              item3.Click += new EventHandler(CopyLine);
          }
          //如果需要顯示右鍵導出Excel
          if (_displayRightClickExportExcel)
          {
              item4 = this._ContextMenuStrip.Items.Add(GetLanguage("SYS001196", "導出EXCEL"));//導出EXCEL
              item4.Click += new EventHandler((s, ee) =>
              { 
                  //TODO:導出Excel動作
              });
          }
          ...

        導出方法比比皆是,因項目而異,多表頭的,普通的。。就不獻丑了(如有需要也可公眾號call我,源碼免費奉上)。此處我們拿復制行來舉栗子,方法如下:

      #region 復制行 
        public void CopyLine(object sender, EventArgs e)
        {
            StringBuilder sqlsb = new StringBuilder();
            GridView gridview = this.MainView as GridView;
            DataTable dt = null;
            DataColumn[] columns = null;
            //BindingSource bs = null;
            DataRow row = null;
            DataRow rowtemp = null;
            //舉例是拿DataTable做數據源,所以下面代碼暫時屏蔽
            //bs = (this.DataSource as BindingSource);
            if (this.DataSource != null)
            {
                if (gridview.FocusedRowHandle >= 0)
                {
                    row = gridview.GetDataRow(gridview.FocusedRowHandle);
                    dt = ((this.DataSource as DataTable).DefaultView as DataView).Table;
                    if (dt.PrimaryKey != null)
                    {
                        columns = dt.PrimaryKey;
                    }
      
                    DataTable dttemp = dt.Clone();
                    rowtemp = dttemp.Rows.Add(row.ItemArray);
                    foreach (DataColumn c in columns)
                    {
                        rowtemp[c.ColumnName] = Guid.NewGuid();
                    }
                    //判斷iOrder是否存在,存在則不復制,且取最大值+1
                    if (dt.Columns.Contains("iOrder"))
                    {
                        int maxIOrder = string.IsNullOrWhiteSpace(dt.Compute("max(iOrder)", "1=1").ToString()) ? 0 : Convert.ToInt32(dt.Compute("max(iOrder)", "1=1").ToString());
                        rowtemp["iOrder"] = maxIOrder + 1;
                    }
                    dt.ImportRow(rowtemp);
      
                    //執行右鍵復制行委托
                    OnRowCopy?.Invoke();
                }
            }
            else
            {
                KzxMessageBox.Show(sysClass.ssLoadMsgOrDefault("MSG002204", "數據源不能為空"));
            }
        }
        #endregion
      private void CopyLineMenu()
        {
            //是否顯示右鍵的復制行按鈕
            if (this._displayRightClickCopyMenu == true)
            {
                bool iscontain = false;
                ToolStripItem item3;
                if (this.ContextMenuStrip == null)
                {
                    this.ContextMenuStrip = new ContextMenuStrip();
                }
                this._ContextMenuStrip = this.ContextMenuStrip;
                for (int i = 0; i < this._ContextMenuStrip.Items.Count; i++)
                {
                    if (this._ContextMenuStrip.Items[i].Name.Equals("copyline", StringComparison.OrdinalIgnoreCase) == true)
                    {
                        iscontain = true;
                        break;
                    }
                }
                if (iscontain == false)
                {
                    item3 = this._ContextMenuStrip.Items.Add(GetLanguage("RMI000452", "復制行"));//復制行
                    item3.Name = "copyline";
                    item3.Click += new EventHandler(CopyLine);
                }
            }
        }

        具體效果如下:

         完成!不過注意,以上功能如果運用于實際項目,煩請做好控制,尤其復制行功能,初衷是一個很復雜的GridControl十幾二十多列的,不想一列一列輸入的,可以采用這種模式,復制行后改動下即可。注意最好是在編輯狀態下顯示此操作,否則不僅不會保存到數據庫,還白費功夫!此本只是演示效果而已!本篇到此結束...

              最后,由于后續所有重寫/重繪控件都在同一個項目使用,而且Dev系統引用文件較多,壓縮后源碼文件仍然很大,如果有需要源碼的朋友,可以微信公眾號聯系博主,源碼可以免費贈予~!有疑問的也可以CALL我一起探討。

        最最后,感謝您的耐心陪伴!如果覺得本篇博文對您或者身邊朋友有幫助的,麻煩點個關注!贈人玫瑰,手留余香,您的支持就是我寫作最大的動力,感謝您的關注,期待和您一起探討!再會!

      posted @ 2020-04-01 21:48  何以解憂唯有*碼  閱讀(897)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲av网一区天堂福利| 中文一区二区视频| 区一区二区三区中文字幕| 久久国产精品77777| 无套内谢少妇高清毛片| 国产欧美另类精品久久久 | 亚洲综合一区国产精品| 精品国精品国自产在国产| 一区二区三区精品不卡| 亚洲成人av综合一区| 国产精品一区二区久久精品| 久久精品国产亚洲欧美| 亚洲av永久无码精品网站| 中文字幕无码av波多野吉衣| 亚洲 欧美 唯美 国产 伦 综合| 国产成人精品无码片区在线观看| 视频专区熟女人妻第二页| 沁阳市| 日本高清不卡一区二区三| 德安县| 成人免费xxxxx在线观看| 国产成人精品一区二三区| 国产乱啊有帅gv小太正| 国产精品人妻系列21p| 国产美女直播亚洲一区色| 日本中文字幕有码在线视频| 国产老妇伦国产熟女老妇高清| 极品白嫩少妇无套内谢| 亚洲Av综合日韩精品久久久| 丰满少妇又爽又紧又丰满在线观看| 色综合五月伊人六月丁香| 亚洲欧洲色图片网站| 国产精品麻豆成人av网| 无码免费大香伊蕉在人线国产| 国内精品自线在拍| 精品人妻伦一二三区久久aaa片| 国产在线拍揄自揄视频网试看| 在线高清免费不卡全码| 久久久久青草线综合超碰| 日韩一区二区三区水蜜桃| 精品一区二区三区不卡|