注冊: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; }
一、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; }
二、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; } }
三、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()); }
九、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; }
十、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; } }
十一、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; } }
參考文獻:https://blog.csdn.net/u010655348/article/details/52952615
==============================================
==============================================