二、winForm-DataGridView操作——DataGridView 操作、屬性說明


  注冊:Form加載窗體代碼

     /// <summary>
    /// 窗體加載Form1
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Form1(object sender, EventArgs e)
        {
            //單元格內容點擊
            this.dataGridView1.CellContentClick += DataGridView1_CellContentClick;
            //單元格點擊
            this.dataGridView1.CellClick += DataGridView1_CellClick;

            //選中進入編輯狀態事件
            this.dataGridView1.CellBeginEdit += DataGridView1_CellBeginEdit;

            //用戶是否可以調整所有列的列寬
            this.dataGridView1.AllowUserToResizeColumns = false;

            //用戶是否可以調整所有行的行高
            this.dataGridView1.AllowUserToResizeRows = false;

            //禁止指定行或者列的Resize
            this.dataGridView1.Columns[0].Resizable = DataGridViewTriState.False;
            this.dataGridView1.Rows[0].Resizable = DataGridViewTriState.False;

            //開啟提示
            this.dataGridView1.ShowCellToolTips = true;
            dataGridView1[1, 1].ToolTipText = "測試下面的CellToolTipTextNeeded";

            //在需要單元格的工具提示文本時發生。
            //this.dataGridView1.CellToolTipTextNeeded += DataGridView1_CellToolTipTextNeeded;

            //this.contextMenuStrip1自己添加控件綁定即可
            dataGridView1.ContextMenuStrip = this.contextMenuStrip1;

            //ContextMenuStrip設定 CellContextMenuStripNeeded
            this.dataGridView1.CellContextMenuStripNeeded += DataGridView1_CellContextMenuStripNeeded;

            //CellFormatting 事件處理方法
            this.dataGridView1.CellFormatting += DataGridView1_CellFormatting;

            //CellParsing 事件處理方法
            this.dataGridView1.CellParsing += DataGridView1_CellParsing;
        }    
Form加載注冊事件

  一、DataGridView 取得或者修改當前單元格的內容:

    核心:DataGridView1.CurrentCell.Value;

    1、當前單元格的Index:

          列:DataGridView1.CurrentCell.ColumnIndex;

            行:DataGridView1.CurrentCell.RowIndex        

    2、當前單元格位置:DataGridView.CurrentCellAddress//結果:{X,Y}

          列:DataGridView.CurrentCellAddress.Y

          行:DataGridView.CurrentCellAddress.X

    第2種方法可以避免或者取消共享事件。

        /// <summary>
        /// 單元格點擊事件(在單元格的任何部分被單擊時發生)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            //獲取當前點擊的行列索引
            MessageBox.Show(""+e.RowIndex + "行,第"+ e.ColumnIndex+"列的值:"+dataGridView1.CurrentCell.Value);
            //獲取當前點擊的位置{X=?,Y=?}
            MessageBox.Show("位置:" + dataGridView1.CurrentCellAddress.ToString());
            // 可以取消激活的單元格
            dataGridView1.CurrentCell.Value = null;
        }

        /// <summary>
        /// 單元格內容點擊事件(在單元格中的內容被單擊時發生)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //獲取當前點擊的行列索引
            MessageBox.Show(""+e.RowIndex+"行,第"+e.ColumnIndex+"列的值:" + dataGridView1.CurrentCell.Value);
            //獲取當前點擊的位置{X=?,Y=?}
            MessageBox.Show("位置:"+dataGridView1.CurrentCellAddress.ToString());
            // 可以取消激活的單元格
            dataGridView1.CurrentCell.Value = null;
        }
    
View Code

  二、DataGridView 設定單元格只讀(ReadOnly/EditMode)

    核心:DataGridView1.ReadOnly = true;

       DataGridView1.EditMode= DataGridViewEditMode.EditProgrammatically

    1、指定單元格只讀:

         所有:DataGridView1[columnIndex,rowIndex ].ReadOnly = true;

          列:DataGridView1.Columns[columnIndex].ReadOnly = true;

          行:DataGridView1.Rows[rowIndex].ReadOnly = true;

    2、EditMode

      //不能手動編輯單元格的內容。調用 DataGridView.BeginEdit 方法,使單元格進入編輯模式進行編輯

      DataGridView1.EditMode= DataGridViewEditMode.EditProgrammatically;

    3、CellBeginEdit 

      //CellBeginEdit 事件來取消單元格的編輯

        /// <summary>
        /// 在為選定的單元格啟動編輯模式時發生
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;
            if (!(string.IsNullOrEmpty(dgv["Id", e.RowIndex].Value.ToString())))
            {
                e.Cancel = true;
            }
        }
View Code

   

  三、DataGridView 禁止列或者行的Resize

    核心:AllowUserToResizeColumns/AllowUserToResizeRows/Resizable

    1、所有的行列禁止

           列:  this.dataGridView1.AllowUserToResizeColumns = false;

           行: this.dataGridView1.AllowUserToResizeRows = false;

    2、指定行列Resizable      

           列: this.dataGridView1.Columns[0].Resizable = DataGridViewTriState.False;
           行: this.dataGridView1.Rows[0].Resizable = DataGridViewTriState.False;

    3、列寬和行高的最小值的設定 MinimumWidth /MinimumHeight 

           列:DataGridView1.Columns[0].MinimumWidth = 100;

           行:DataGridView1.Rows[0].MinimumHeight = 50;

    4、禁止用戶改變行頭的寬度以及列頭的高度

           列:DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;

           行:DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing; 

 

  四、DataGridView 列寬和行高自動調整的設定

    核心:DataGridViewAutoSizeRowsMode/DataGridViewAutoSizeColumnsMode

    1、設定行高和列寬自動調整

          列:DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

          行:DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 

    2、第一列自動調整 

          列:DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

    3、設定列頭的高度和行頭的寬度自動調整

          列:DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;

          行:DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;

  五、DataGridView 凍結列或行

    核心:DataGridViewColumn.Frozen

    1、列凍結:DataGridViewColumn.Frozen 屬性為 True 時,

          該列左側的所有列被固定, 橫向滾動時固定列不隨滾動條滾動而左右移動

    2、行凍結:DataGridViewRow.Frozen 屬性為 True 時,

          該行上面的所有行被固定, 縱向滾動時固定行不隨滾動條滾動而上下移動。

      列:DataGridView1.Columns[1].Frozen = true;

      行:DataGridView1.Rows[2].Frozen = true;

  六、 DataGridView 列順序的調整

    設定DataGridView 的AllowUserToOrderColumns 為 True 的時候, 用戶可以自由調整列的順序。

    當用戶改變列的順序的時候,其本身的index不會改變,但是DisplayIndex改變了,

    可以在代碼中通過DisplayIndex 來改變列的順序,順序改變時候會引發ColumnDisplayIndexChanged事件

  七、DataGridView 剪切板的操作

    待研究補充

  八、DataGridView 單元格的ToolTip的設置

    1、ToolTip內容

    核心:DataGridView.ShowCellToolTips = True 的情況下, 單元格的 ToolTip 可以表示出來。

       對於單元格窄小,無法完全顯示的單元格, ToolTip 可以顯示必要的信息

      ALL:  DataGridView1[0, 0].ToolTipText = "該單元格的內容不能修改";

      列頭:DataGridView1.Columns[0].ToolTipText = "該列只能輸入數字";

      行頭:DataGridView1.Rows[0].HeaderCell.ToolTipText = "該行單元格內容不能修改";

    2、CellToolTipTextNeeded 事件

    在批量的單元格的 ToolTip 設定的時候,單個指定那么設定的效率比較低,

    這時候可以利用CellToolTipTextNeeded 事件。當單元格的 ToolTipText 變化的時候也會引發該事件。

    但是,當DataGridView的DataSource被指定且VirualMode=True的時候,該事件不會被引發。

        /// <summary>
        /// 在需要單元格的工具提示文本時發生。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataGridView1_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e)
        {
            MessageBox.Show(e.ToolTipText.ToString());
        }
CellToolTipTextNeeded

  九、DataGridView 的右鍵菜單(ContextMenuStrip) 

    核心:ContextMenuStrip、 CellontextMenuStripNeeded、RowContextMenuStripNeeded

    DataGridView, DataGridViewColumn, DataGridViewRow, DataGridViewCell 有 ContextMenuStrip 屬性。 

    DataGridViewColumn 的 ContextMenuStrip 屬性設定了 除了列頭以外的單元格的右鍵菜單。

    DataGridViewRow 的 ContextMenuStrip 屬性設定了除了行頭以外的單元格的右鍵菜單。

    DataGridViewCell的 ContextMenuStrip 屬性設定了指定單元格的右鍵菜單

    1、DataGridView 的ContextMenuStrip 設定

      DataGridView1.ContextMenuStrip = this.ContextMenuStrip1;

    2、列的 ContextMenuStrip 設定     

      DataGridView1.Columns[0].ContextMenuStrip = this.ContextMenuStrip2;

    3、 列頭的ContextMenuStrip 設定  

      DataGridView1.Columns[0].HeaderCell.ContextMenuStrip = this.ContextMenuStrip2;

    4、 行的 ContextMenuStrip 設定 

      DataGridView1.Rows[0].ContextMenuStrip = this.ContextMenuStrip3;

    5、 單元格的 ContextMenuStrip 設定

       6、CellContextMenuStripNeeded 

      在DataGridView使用了DataSource綁定而且是VirtualMode的時候,該事件將不被引發。

    7、RowContextMenuStripNeeded

        /// <summary>
        /// 在需要單元格的快捷菜單時發生。CellContextMenuStripNeeded  
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataGridView1_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
        {
            e.ContextMenuStrip = this.contextMenuStrip1;
        }
CellContextMenuStripNeeded

  十、DataGridView 單元格表示值的自定義

    核心:CellFormatting

    1、//CellFormatting 事件處理方法   

    CellFormatting事件的DataGridViewCellFormattingEventArgs對象的Value屬性一開始保存着未被格式化的值。

    當Value屬性被設定表示用的文本之后,把FormattingApplied屬性做為True,告知DataGridView文本已經格式化完畢。

    如果不這樣做的話,DataGridView會根據已經設定的Format,NullValue,DataSourceNullValue,FormatProvider屬性會將Value屬性會被重新格式化一遍。

        /// <summary>
        ///在單元格的內容需要設置格式以便於顯示時發生 CellFormatting   
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;
            // 如果單元格是“id”列的單元格
            if (dgv.Columns[e.ColumnIndex].Name == "Id" && e.Value is string)
            {
                // 將單元格值改為大寫
                string str = e.Value.ToString();
                e.Value = str.ToUpper();
                // 應用該Format,Format完畢。
                e.FormattingApplied = true;
            }
        }
CellFormatting 事件處理方法

    十一、DataGridView 用戶輸入時,單元格輸入值的設定

    核心:CellParsing 

    1、//CellParsing 事件處理方法

        /// <summary>
        /// CellParsing 事件處理方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;

            //單元格列為“Id”時
            if (dgv.Columns[e.ColumnIndex].Name == "Id" && e.DesiredType == typeof(string))
            {
                //將單元格值設為大寫
                e.Value = e.Value.ToString().ToUpper();
                //解析完畢
                e.ParsingApplied = true;
            }
        }
CellParsing 事件處理方法

 

參考文獻:https://blog.csdn.net/u010655348/article/details/52952615 

==============================================

==============================================


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM