WinForm開發 DataGridView控件的各種操作總結(一、單元格內容的操作)

一、單元格內容的操作

 

 // 取得當前單元格內容
   Console.WriteLine(DataGridView1.CurrentCell.Value); 
// 取得當前單元格的列 Index 
   Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex); 
// 取得當前單元格的行 Index 
   Console.WriteLine(DataGridView1.CurrentCell.RowIndex);


另外,使用DataGridView.CurrentCellAddress 屬性(而不是直接訪問單元格)來確定單元格所在的行: 

DataGridView.CurrentCellAddress.Y 和列: DataGridView.CurrentCellAddress.X 。這對於避免取消共享行的共享非常有用。 
當前的單元格可以通過設定 DataGridView 對象的CurrentCell 來改變。可以通過 CurrentCell 來設定 
DataGridView
的激活單元格。將 CurrentCell 設爲Nothing(null) 可以取消激活的單元格

// 設定 (0, 0)  爲當前單元格 
DataGridView1.CurrentCell = DataGridView1[0, 0];
 
在整行選中模式開啓時,你也可以通過 CurrentCell 來設定選定行。

        /// <summary> 
        /// 向下遍歷 
        /// </summary> 
        /// <param ></param> 
        /// <param ></param> 
        private void button4_Click(object sender, EventArgs e) 
        ...{ 
            int row = this.dataGridView1.CurrentRow.Index + 1; 
            if (row > this.dataGridView1.RowCount - 1) 
                row = 0; 
            this.dataGridView1.CurrentCell = this.dataGridView1[0, row];  
        } 

        /// <summary> 
        /// 向上遍歷 
        /// </summary> 
        /// <param ></param> 
        /// <param ></param> 
        private void button5_Click(object sender, EventArgs e) 
        ...{ 
            int row = this.dataGridView1.CurrentRow.Index - 1; 
            if (row < 0) 
                row = this.dataGridView1.RowCount - 1; 
            this.dataGridView1.CurrentCell = this.dataGridView1[0, row];  
        } 

 

        * 注意: this.dataGridView 的索引器的參數是:columnIndex, rowIndex 或是 columnName, rowIndex 
這與習慣不同。

 

DataGridView  設定單元格只讀:

 

1使用 ReadOnly 屬性 
?
 如果希望,DataGridView內所有單元格都不可編輯,那麼只要: 
//
設置DataGridView1 爲只讀 
DataGridView1.ReadOnly = true;
此時,用戶的新增行操作和刪除行操作也被屏蔽了。 

如果希望,DataGridView內某個單元格不可編輯,那麼只要:

// 設置 DataGridView1 的第2列整列單元格爲只讀 
DataGridView1.Columns[1].ReadOnly = true; 
// 設置 DataGridView1 的第3行整行單元格爲只讀 
DataGridView1.Rows[2].ReadOnly = true; 
// 設置 DataGridView1 的[0,0]單元格爲只讀 
DataGridView1[0, 0].ReadOnly = true;
 

*******DataGridView 行頭列頭的單元格

// 改變DataGridView1的第一列列頭內容 
DataGridView1.Columns[0].HeaderCell.Value = "第一列"; 
// 改變DataGridView1的第一行行頭內容 
DataGridView1.Rows[0].HeaderCell.Value = "第一行"; 
// 改變DataGridView1的左上頭部單元內容 
DataGridView1.TopLeftHeaderCell.Value = "左上"; 
//另外你也可以通過 HeaderText 來改變他們的內容。
// 改變DataGridView1的第一列列頭內容 
DataGridView1.Columns[0].HeaderText = "第一列";


*********** DataGridView 單元格的ToolTip的設置


DataGridView.ShowCellToolTips = True
的情況下,單元格的 ToolTip 可以表示出來。對於單元格窄小,無法完全顯示的單元格, ToolTip 可以顯示必要的信息。 
1
設定單元格的ToolTip內容 

 

// 設定單元格的ToolTip內容 
DataGridView1[0, 0].ToolTipText = "該單元格的內容不能修改"; 
// 設定列頭的單元格的ToolTip內容 
DataGridView1.Columns[0].ToolTipText = "該列只能輸入數字"; 
// 設定行頭的單元格的ToolTip內容 
DataGridView1.Rows[0].HeaderCell.ToolTipText = "該行單元格內容不能修改"; 


 

2 CellToolTipTextNeeded 事件 
在批量的單元格的 ToolTip 設定的時候,一個一個指定那麼設定的效率比較低,這時候可以利用 CellToolTipTextNeeded 事件。當單元格的ToolTipText 變化的時候也會引發該事件。但是,當DataGridViewDataSource被指定且VirualMode=True的時候,該事件不會被引發。

// CellToolTipTextNeeded事件處理方法 
private void DataGridView1_CellToolTipTextNeeded(object sender, 
    DataGridViewCellToolTipTextNeededEventArgs e) 
{ 
    e.ToolTipText = e.ColumnIndex.ToString() + ", " + e.RowIndex.ToString(); 
}


 

*******DataGridView 的單元格的邊框、網格線樣式的設定


1) DataGridView
的邊框線樣式的設定 
DataGridView
的邊框線的樣式是通過 DataGridView.BorderStyle 屬性來設定的。BorderStyle 屬性設定值是一個
BorderStyle
枚舉: FixedSingle(單線,默認)、Fixed3DNone 
2)
單元格的邊框線樣式的設定 
單元格的邊框線的樣式是通過 DataGridView.CellBorderStyle 屬性來設定的。CellBorderStyle 屬性設定值是 
DataGridViewCellBorderStyle
枚舉。(詳細參見MSDN 
另外,通過 DataGridView.ColumnHeadersBorderStyle RowHeadersBorderStyle 屬性可以修改DataGridView 的頭部的單元格邊框線樣式。屬性設定值是 DataGridViewHeaderBorderStyle 枚舉。(詳細參見 MSDN 
3
單元格的邊框顏色的設定 
單元格的邊框線的顏色可以通過 DataGridView.GridColor 屬性來設定的。默認是ControlDarkDark 。但是隻有在 CellBorderStyle 被設定爲SingleSingleHorizontalSingleVertical 的條件下才能改變其邊框線的顏色。同樣,ColumnHeadersBorderStyle 以及RowHeadersBorderStyle 只有在被設定爲Single 時,才能改變顏色。 
4
單元格的上下左右的邊框線式樣的單獨設定 
CellBorderStyle
只能設定單元格全部邊框線的式樣。要單獨改變單元格某一邊邊框式樣的話,需要用到DataGridView.AdvancedCellBorderStyle屬性。如示例: 
'
單元格的上邊和左邊線設爲二重線 
'
單元格的下邊和右邊線設爲單重線 

 

DataGridView1.AdvancedCellBorderStyle.Top = _ 
    DataGridViewAdvancedCellBorderStyle.InsetDouble 
DataGridView1.AdvancedCellBorderStyle.Right = _ 
    DataGridViewAdvancedCellBorderStyle.Inset 
DataGridView1.AdvancedCellBorderStyle.Bottom = _ 
    DataGridViewAdvancedCellBorderStyle.Inset 
DataGridView1.AdvancedCellBorderStyle.Left = _ 
    DataGridViewAdvancedCellBorderStyle.InsetDouble 


 

同樣,設定行頭單元格的屬性是:AdvancedRowHeadersBorderStyle設定列頭單元格屬性是:AdvancedColumnHeadersBorderStyle

 

*******DataGridView 單元格表示值的自定義 

通過CellFormatting事件,可以自定義單元格的表示值。(比如:值爲Error的時候,單元格被設定爲紅色) 
下面的示例:將“Colmn1”列的值改爲大寫。

//CellFormatting 事件處理方法 
private void DataGridView1_CellFormatting(object sender, 
    DataGridViewCellFormattingEventArgs e) 
{ 
    DataGridView dgv = (DataGridView)sender; 

    // 如果單元格是“Column1”列的單元格 
    if (dgv.Columns[e.ColumnIndex].Name == "Column1" && e.Value is string) 
    { 
        // 將單元格值改爲大寫 
        string str = e.Value.ToString(); 
        e.Value = str.ToUpper(); 
        // 應用該Format,Format完畢。 
        e.FormattingApplied = true; 
    } 
} 


 

CellFormatting事件的DataGridViewCellFormattingEventArgs對象的Value屬性一開始保存着未被格式化的值。當Value屬性被設定表示用的文本之後,把FormattingApplied屬性做爲True,告知DataGridView文本已經格式化完畢。如果不這樣做的話,DataGridView會根據已經設定的FormatNullValueDataSourceNullValueFormatProvider屬性會將Value屬性會被重新格式化一遍。

 

*******DataGridView 用戶輸入時,單元格輸入值的設定


通過DataGridView.CellParsing 事件可以設定用戶輸入的值。下面的示例:當輸入英文文本內容的時候,立即被改變爲大寫。

//CellParsing 事件處理方法 
private void DataGridView1_CellParsing(object sender, 
    DataGridViewCellParsingEventArgs e) 
{ 
    DataGridView dgv = (DataGridView)sender; 

    //單元格列爲“Column1”時 
    if (dgv.Columns[e.ColumnIndex].Name == "Column1" && 
        e.DesiredType == typeof(string)) 
    { 
        //將單元格值設爲大寫 
        e.Value = e.Value.ToString().ToUpper(); 
        //解析完畢 
        e.ParsingApplied = true; 
    } 
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章