DataGridView 使用精華


DataGridView控件用法合集

1. 當前的單元格屬性取得、變更

[C#]

//顯示當前單元格的值

Console.WriteLine(DataGridView1.CurrentCell.Value);

//顯示當前單元格的列索引

Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex);

//顯示當前單元格的行索引

Console.WriteLine(DataGridView1.CurrentCell.RowIndex); 

//00)為現在的單元格

DataGridView1.CurrentCell = DataGridView1[0, 0];

2. 編輯屬性

全部單元格編輯屬性

[C#]

//讀取DataGridView 1的單元格

DataGridView1.ReadOnly = true;

指定行列單元格編輯屬性

[C#]

/DataGridView 1的第二列

DataGridView1.Columns[1].ReadOnly = true;

//使DataGridView1的第三行為只讀

DataGridView1.Rows[2].ReadOnly = true;

//讀取DataGridView 1的(00)的單元格

DataGridView1[0, 0].ReadOnly = true;

根據條件判斷單元格的編輯屬性

下例中column2的值是True的時候,Column1設為可編輯

[C#]

//CellBeginEdit事件處理程序

private void DataGridView1_CellBeginEdit(object sender,

    DataGridViewCellCancelEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    //判斷是否能編輯

    if (dgv.Columns[e.ColumnIndex].Name == "Column1" &&

        !(bool)dgv["Column2", e.RowIndex].Value)

    {

       //不可編輯

        e.Cancel = true;

    }}

3. 最下面一列新追加行非表示

3.DataGridView最下面一列新追加行非表示

[C#]

//用戶不能將新的行添加到DataGridView 1

DataGridView1.AllowUserToAddRows = false;

4. 判斷當前選中行是否為新追加的行

[C#]

if (DataGridView1.CurrentRow.IsNewRow)

    Console.WriteLine("有現在的單元格的行是新的行");

else

    Console.WriteLine("現在的電池有行,新行嗎。");

5.刪除行可否設定

[C#]

//DataGridView一行用戶刪除不了的

DataGridView1.AllowUserToDeleteRows = false;

根據條件判斷當前行是否要刪除

[C#]

//DataGridView 1UserDeleting Rime事件韓劇

private void DataGridView1_UserDeletingRow(

    object sender, DataGridViewRowCancelEventArgs e)

{

    //刪除或確認用戶

    if (MessageBox.Show("您要刪除這一列嗎?",

        "確認刪除",

        MessageBoxButtons.OKCancel,

        MessageBoxIcon.Question) != DialogResult.OK)

    {

        e.Cancel = true;

    }

}

6. 行列不表示和刪除

行列不表示

[C#]

//隱藏包含DataGridView1的列

DataGridView1.Columns[0].Visible = false;

//非顯示DataGridView 1的行

DataGridView1.Rows[0].Visible = false;

行列表頭部分不表示

[C#]

//隱藏列標題

DataGridView1.ColumnHeadersVisible = false;

//非顯示行頁眉

DataGridView1.RowHeadersVisible = false;

指定行列刪除

[C#]

//"刪除列1

DataGridView1.Columns.Remove("Column1");

//刪除開始列

DataGridView1.Columns.RemoveAt(0);

//刪除最初的行

DataGridView1.Rows.RemoveAt(0);

選擇的行列刪除(多行列)

[C#]

//刪除所有在DataGridView 1所選擇的行

foreach (DataGridViewRow r in DataGridView1.SelectedRows)

{

    if (!r.IsNewRow)

    {

        DataGridView1.Rows.Remove(r);

    }

}

7. 行列寬度高度設置為不能編輯

[C#]

//用戶不能改變DataGridView 1的列的寬度

DataGridView1.AllowUserToResizeColumns = false;

//防止用戶更改DataGridView1行的高度

DataGridView1.AllowUserToResizeRows = false;

指定行列寬度高度設置為不能編輯

[C#]

//讓用戶無法改變DataGridView 1的列的寬度

DataGridView1.Columns[0].Resizable = DataGridViewTriState.False;

//防止用戶更改DataGridView1的第一行的高度

DataGridView1.Rows[0].Resizable = DataGridViewTriState.False;

列幅行高最小值設定

[C#]

//以最開始的列的寬度最小為100像素

DataGridView1.Columns[0].MinimumWidth = 100;

//以第一個行的高度最小為50個像素

DataGridView1.Rows[0].MinimumHeight = 50;

行列表頭部分行高列幅設置為不能編輯

[C#]

//阻止更改列標題的高度

DataGridView1.ColumnHeadersHeightSizeMode =

    DataGridViewColumnHeadersHeightSizeMode.DisableResizing;

//調整行頁眉的寬度

DataGridView1.RowHeadersWidthSizeMode =

    DataGridViewRowHeadersWidthSizeMode.EnableResizing;

8. 行高列幅自動調整

[C#]

//根據頁眉和所有單元格的內容,自動調整列的寬度

DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

//根據標題和所有單元格內容自動調整行高度

DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

表頭部分行高列幅自動調整

[C#]

//自動調整列標題的高度

DataGridView1.ColumnHeadersHeightSizeMode =

    DataGridViewColumnHeadersHeightSizeMode.AutoSize;

//自動調整行標題的寬度

DataGridView1.RowHeadersWidthSizeMode =

    DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;

指定列自動調整

[C#]

//自動調整前列的寬度

DataGridView1.Columns[0].AutoSizeMode =

    DataGridViewAutoSizeColumnMode.DisplayedCells;

9. 指定行列凍結

列凍結(當前列以及左側做所有列)

[C#]

//固定DataGridView1的左側兩列

DataGridView1.Columns[1].Frozen = true;

行凍結(當前行以及上部所有行)

[C#]

//固定DataGridView 1的上部2

DataGridView1.Rows[2].Frozen = true;

指定單元格凍結(單元格所在行上部分所有行,列左側所有列)

[C#]

DataGridView1[0, 0]. Frozen = true;

10. 列順序變更可否設定

[C#]

//用戶可以改變DataGridView 1的列的位置

DataGridView1.AllowUserToOrderColumns = true;

但是如果列凍結的情況下,凍結的部分不能變更到非凍結的部分。
變更后列位置取得

[C#]

//列“Column1”的當前位置

Console.WriteLine(DataGridView1.Columns["Column1"].DisplayIndex);

//排在前面的“Column1

DataGridView1.Columns["Column1"].DisplayIndex = 0;

11. 行復數選擇

復數行選擇不可

[C#]

//DataGridView 1中不選擇多個單元格,行,列

DataGridView1.MultiSelect = false;

單元格選擇的時候默認為選擇整行

[C#]

//選擇單元格並選擇整個行

DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

12. 選擇的行、列、單元格取得

[C#]

//顯示選擇的單元格

Console.WriteLine("選擇的單元格");

foreach (DataGridViewCell c in DataGridView1.SelectedCells)

{

    Console.WriteLine("{0}, {1}", c.ColumnIndex, c.RowIndex);

}

//顯示選擇的行

Console.WriteLine("被選擇的行");

foreach (DataGridViewRow r in DataGridView1.SelectedRows)

{

    Console.WriteLine(r.Index);

}

//顯示選擇的列

Console.WriteLine("選擇的列");

foreach (DataGridViewColumn c in DataGridView1.SelectedColumns)

{

    Console.WriteLine(c.Index);

}

指定行、列、單元格取得

[C#]

//選擇(00)的單元格

DataGridView1[0, 0].Selected = true;

//選擇索引1中的行

DataGridView1.Rows[1].Selected = true;

//選擇索引2中的列

DataGridView1.Columns[2].Selected = true;

13. 指定單元格是否表示

[C#]

if (!DataGridView1[0, 0].Displayed && DataGridView1[0, 0].Visible)

{

    DataGridView1.CurrentCell = DataGridView1[0, 0];

}

14. 表頭部單元格取得

[C#]

//改變DataGridView 1的列的文本

DataGridView1.Columns[0].HeaderCell.Value = "開始列";

//改變DataGridView 1的行的文本

DataGridView1.Rows[0].HeaderCell.Value = "第一行";

//更改DataGridView1左上角單元格中的文本

DataGridView1.TopLeftHeaderCell.Value = "左上";

15. 表頭部單元格文字列設定

更改列Header表示文字列

[C#]

//改變DataGridView 1的列的文本

DataGridView1.Columns[0].HeaderText = "開始列";

更改行Header表示文字列

[C#]

//DataGridView1的行標題中顯示行號

for (int i = 0; i < DataGridView1.Rows.Count; i++)

{

    DataGridView1.Rows[i].HeaderCell.Value = i.ToString();

}

//自動調節行頁眉的寬度

DataGridView1.AutoResizeRowHeadersWidth(

    DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);

最左上Header單元格文字列

[C#]

//在左上角的標題單元格中顯示“/

DataGridView1.TopLeftHeaderCell.Value = "/";

16. 選擇的部分拷貝至剪貼板

拷貝模式設定

[C#]

//不復制標題

DataGridView1.ClipboardCopyMode =

    DataGridViewClipboardCopyMode.EnableWithoutHeaderText;

選中部分拷貝

[C#]

//將選定的單元格復制到剪貼板

Clipboard.SetDataObject(DataGridView1.GetClipboardContent());

17. 粘貼

[C#]

//從現在的單元格的行到下

if (DataGridView1.CurrentCell == null)

    return;

int insertRowIndex = DataGridView1.CurrentCell.RowIndex;

//取得剪切板的內容,用行分開

string pasteText = Clipboard.GetText();

if (string.IsNullOrEmpty(pasteText))

    return;

pasteText = pasteText.Replace("\r\n", "\n");

pasteText = pasteText.Replace('\r', '\n');

pasteText.TrimEnd(new char[] { '\n' });

string[] lines = pasteText.Split('\n');

bool isHeader = true;

foreach (string line in lines)

{

    //列頁眉的話就飛

    if (isHeader)

    {

        isHeader = false;

        continue;

    }

    //分割標簽

    string[] vals = line.Split('\t');

    //調查列數合適

    if (vals.Length - 1 != DataGridView1.ColumnCount)

        throw new ApplicationException("列數不同。");

    DataGridViewRow row = DataGridView1.Rows[insertRowIndex];

    //設置頁眉

    row.HeaderCell.Value = vals[0];

    //設置各單元格的值

    for (int i = 0; i < row.Cells.Count; i++)

    {

        row.Cells[i].Value = vals[i + 1];

    }

    //到下一行

    insertRowIndex++;

}

18. 單元格上ToolTip表示設定(鼠標移動到相應單元格上時,彈出說明信息)

[C#]

//設置在單元格中顯示的ToolTip

DataGridView1[0, 0].ToolTipText = "このセルは変更できません";

//設置在列頁眉上顯示的ToolTip

DataGridView1.Columns[0].ToolTipText = "この列には數字を入力できます";

//設置在行頁眉上顯示的ToolTip

DataGridView1.Rows[0].HeaderCell.ToolTipText = "この行のセルは変更できません";

[C#]

//CellToolTipTextNeeded事件處理程序

private void DataGridView1_CellToolTipTextNeeded(object sender,

    DataGridViewCellToolTipTextNeededEventArgs e)

{

    e.ToolTipText = e.ColumnIndex.ToString() + ", " + e.RowIndex.ToString();

}

19. 中的ContextMenuStrip屬性

[C#]

//設定DataGridView的控制程序

DataGridView1.ContextMenuStrip = this.ContextMenuStrip1;

//設置列中的LayerMenuBarp

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

//設置列頁眉的控制程序

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

//設置行的換行和條帶p

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

//設定單元格的控制程序

DataGridView1[0, 1].ContextMenuStrip = this.ContextMenuStrip4;

也可以用CellContextMenuStripNeededRowContextMenuStripNeeded屬性進行定義

[C#]

//CellitMenuStripNeeded事件處理程序

private void DataGridView1_CellContextMenuStripNeeded(object sender,

    DataGridViewCellContextMenuStripNeededEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    if (e.RowIndex < 0)

    {

        //設置在列頁眉上顯示的控制程序

        e.ContextMenuStrip = this.ContextMenuStrip1;

    }

    else if (e.ColumnIndex < 0)

    {

        //設置在行標題中顯示的大綱視圖

        e.ContextMenuStrip = this.ContextMenuStrip2;

    }

    else if (dgv[e.ColumnIndex, e.RowIndex].Value is int)

    {

        //更改單元格是整數類型時要顯示的大綱

        e.ContextMenuStrip = this.ContextMenuStrip3;

    }

}

20. 指定滾動框位置

[C#]

//滾動到開頭的行

DataGridView1.FirstDisplayedScrollingRowIndex = 0;

//滾動到第一列

DataGridView1.FirstDisplayedScrollingColumnIndex = 0;

21. 手動追加列

[C#]

//不要自動制作列

DataGridView1.AutoGenerateColumns = false;

//設置數據源

DataGridView1.DataSource = BindingSource1;

//制作DataGridViewTecxColumn

DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn();

//綁定數據源中的列1

textColumn.DataPropertyName = "Column1";

//設定名字和頁眉

textColumn.Name = "Column1";

textColumn.HeaderText = "Column1";

//添加列

DataGridView1.Columns.Add(textColumn);

22. 全體分界線樣式設置

[C#]

//DataGridView的邊界線設置為3D

DataGridView1.BorderStyle = BorderStyle.Fixed3D;

單元格上下左右分界線樣式設置

[C#]

//把單元格的上和左邊分成兩條線的邊界線,

//向下和向右對齊一條重線的凹邊界線

DataGridView1.AdvancedCellBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.InsetDouble;

DataGridView1.AdvancedCellBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.Inset;

DataGridView1.AdvancedCellBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.Inset;

DataGridView1.AdvancedCellBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.InsetDouble;

23. 根據單元格屬性更改顯示內容

如下例,當該列是字符串時,自動轉換文字大小寫

[C#]

//Carelmatting事件韓劇

private void DataGridView1_CellFormatting(object sender,

    DataGridViewCellFormattingEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    //確認單元格的列

    if (dgv.Columns[e.ColumnIndex].Name == "Column1" && e.Value is string)

    {

        //以大寫形式顯示

        string str = e.Value.ToString();

        e.Value = str.ToUpper();

        //通知您不需要格式化

        e.FormattingApplied = true;

    }

}

24. 新追加行的行高樣式設置的

行高設置

[C#]

//設置行模板的高度

DataGridView1.RowTemplate.Height = 50;

//設定行的最低高度

DataGridView1.RowTemplate.MinimumHeight = 50;

樣式設置

[C#]

//將行模板的單元格樣式為黃色

DataGridView1.DefaultCellStyle.BackColor = Color.Yellow;

25. 新追加行單元格默認值設置

[C#]

//DefaultValuesNeeded事件處理程序

private void DataGridView1_DefaultValuesNeeded(object sender,

    DataGridViewRowEventArgs e)

{

    //指定單元格的既定值

    e.Row.Cells["Column1"].Value = 0;

    e.Row.Cells["Column2"].Value = "-";

}

26. 單元格數據錯誤標簽表示

 

[C#]

//00)的單元格顯示錯誤圖標

DataGridView1[0, 0].ErrorText = "請確認單元格的值";

//索引在三行中顯示錯誤圖標

DataGridView1.Rows[3].ErrorText = "不能輸入負值。";

在大量單元格需要錯誤提示時,也可以用CellErrorTextNeededRowErrorTextNeeded事件

[C#]

//CareErrorTectectentNER事件韓劇

private void DataGridView1_CellErrorTextNeeded(object sender,

    DataGridViewCellErrorTextNeededEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

//如果單元格的值是負整數,則顯示錯誤圖標

    object cellVal = dgv[e.ColumnIndex, e.RowIndex].Value;

    if (cellVal is int && ((int)cellVal) < 0)

    {

        e.ErrorText = "不能輸入負整數。";

    }

}

//RoErrorTectectentNER事件韓劇

private void DataGridView1_RowErrorTextNeeded(object sender,

    DataGridViewRowErrorTextNeededEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    if (dgv["Column1", e.RowIndex].Value == DBNull.Value &&

        dgv["Column2", e.RowIndex].Value == DBNull.Value)

    {

        e.ErrorText =

            "請至少在Column1Column2中輸入值。";

    }

}

27. 單元格內輸入值正確性判斷

[C#]

//CellValidating事件處理程序

private void DataGridView1_CellValidating(object sender,

    DataGridViewCellValidatingEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    if (dgv.Columns[e.ColumnIndex].Name == "Column1" &&

        e.FormattedValue.ToString() == "")

    {

        //設置錯誤文本

        dgv.Rows[e.RowIndex].ErrorText = "沒有輸入值";

        //要取消輸入的值並將其還原為原始值,請執行以下操作:

        dgv.CancelEdit();

        //取消

        e.Cancel = true;

    }

}

//CareValidater事件漢劇

private void DataGridView1_CellValidated(object sender,

    DataGridViewCellEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    //刪除錯誤文本

    dgv.Rows[e.RowIndex].ErrorText = null;

}

28. 單元格輸入錯誤值事件的捕獲

[C#]

//DataError事件短劇

private void DataGridView1_DataError(object sender,

    DataGridViewDataErrorEventArgs e)

{

    if (e.Exception != null)

    {

        MessageBox.Show(this,

            string.Format("({0}, {1}) 的單元格中發生錯誤。nn說明: {2}",

            e.ColumnIndex, e.RowIndex, e.Exception.Message),

            "發生錯誤",

            MessageBoxButtons.OK, MessageBoxIcon.Error);

    }

}

輸入錯誤值時返回原先數據

[C#]

//DataError事件短劇

private void DataGridView1_DataError(object sender,

    DataGridViewDataErrorEventArgs e)

{

    e.Cancel = false;

}

29. 行排序(點擊列表頭自動排序的設置)

[C#]

//阻止排序

foreach (DataGridViewColumn c in DataGridView1.Columns)

    c.SortMode = DataGridViewColumnSortMode.NotSortable;

30. 自動行排序(新追加值也會自動排序)

[C#]

//格式的短劇

private void Form1_Load(object sender, EventArgs e)

{

    //自動排列

    foreach (DataGridViewColumn c in DataGridView1.Columns)

        c.SortMode = DataGridViewColumnSortMode.Automatic;

}

//Button 1Click事件韓劇

private void Button1_Click(object sender, EventArgs e)

{

    if (DataGridView1.CurrentCell == null)

        return;

    //確定要重新排序的列

    DataGridViewColumn sortColumn = DataGridView1.CurrentCell.OwningColumn;

    //決定重新排列的方向(升序或降序)

    ListSortDirection sortDirection = ListSortDirection.Ascending;

    if (DataGridView1.SortedColumn != null &&

        DataGridView1.SortedColumn.Equals(sortColumn))

    {

        sortDirection =

            DataGridView1.SortOrder == SortOrder.Ascending ?

            ListSortDirection.Descending : ListSortDirection.Ascending;

    }

    //排序

    DataGridView1.Sort(sortColumn, sortDirection);

}

31. 自動行排序禁止情況下的排序

[C#]

//格式的短劇

private void Form1_Load(object sender, EventArgs e)

{

    //添加事件處理程序

    DataGridView1.RowsAdded += new DataGridViewRowsAddedEventHandler(

        DataGridView1_RowsAdded);

    DataGridView1.CellValueChanged += new DataGridViewCellEventHandler(

        DataGridView1_CellValueChanged);

    DataGridView1.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(

        DataGridView1_ColumnHeaderMouseClick);

}

//ColumnHeaderMoug Click事件韓劇

private void DataGridView1_ColumnHeaderMouseClick(object sender,

    DataGridViewCellMouseEventArgs e)

{

    DataGridViewColumn clickedColumn = DataGridView1.Columns[e.ColumnIndex];

    if (clickedColumn.SortMode != DataGridViewColumnSortMode.Automatic)

        this.SortRows(clickedColumn, true);

}

//RATsAW事件漢劇

private void DataGridView1_RowsAdded(object sender,

    DataGridViewRowsAddedEventArgs e)

{

    this.SortRows(DataGridView1.SortedColumn, false);

}

//CellValueChangedイベントハンドラ

private void DataGridView1_CellValueChanged(object sender,

    DataGridViewCellEventArgs e)

{

    if (DataGridView1.SortedColumn != null &&

        e.ColumnIndex == DataGridView1.SortedColumn.Index)

        this.SortRows(DataGridView1.SortedColumn, false);

}

/// <summary>

/// 以指定的列為基准進行排序

/// </summary>

/// <param name="sortColumn">要參考的列</param>

/// <param name="orderToggle">把重新排列的方向改為角度</param>

private void SortRows(DataGridViewColumn sortColumn, bool orderToggle)

{

    if (sortColumn == null)

        return;

//清除以前的排序圖示符

    if (sortColumn.SortMode == DataGridViewColumnSortMode.Programmatic &&

        DataGridView1.SortedColumn != null &&

        !DataGridView1.SortedColumn.Equals(sortColumn))

    {

        DataGridView1.SortedColumn.HeaderCell.SortGlyphDirection =

            SortOrder.None;

    }

    //排序方向(升序或降序)

    ListSortDirection sortDirection;

    if (orderToggle)

    {

        sortDirection =

            DataGridView1.SortOrder == SortOrder.Descending ?

            ListSortDirection.Ascending : ListSortDirection.Descending;

    }

    else

    {

        sortDirection =

            DataGridView1.SortOrder == SortOrder.Descending ?

            ListSortDirection.Descending : ListSortDirection.Ascending;

    }

    SortOrder sortOrder =

        sortDirection == ListSortDirection.Ascending ?

        SortOrder.Ascending : SortOrder.Descending;

    //排序排序排序

    DataGridView1.Sort(sortColumn, sortDirection);

    if (sortColumn.SortMode == DataGridViewColumnSortMode.Programmatic)

    {

        //變更排列網格

        sortColumn.HeaderCell.SortGlyphDirection = sortOrder;

    }

}

32. 指定列指定排序

[C#]

//獲得DataGridView 1DataTable

DataTable dt = (DataTable)DataGridView1.DataSource;

//取得DataView

DataView dv = dt.DefaultView;

//Column1Column2中按升序排列

dv.Sort = "Column1, Column2 ASC";

//顯示在兩列的頁眉上替換的網格

DataGridView1.Columns["Column1"].HeaderCell.SortGlyphDirection =

    SortOrder.Ascending;

DataGridView1.Columns["Column2"].HeaderCell.SortGlyphDirection =

    SortOrder.Ascending;

33. 單元格樣式設置

指定行列的樣式設定

[C#]

//0的列的單元格的背景顏色為水色

DataGridView1.Columns[0].DefaultCellStyle.BackColor = Color.Aqua;

//0的行的單元格的背景色為薄灰色

DataGridView1.Rows[0].DefaultCellStyle.BackColor = Color.LightGray;

奇數行樣式設定

[C#]

//將奇數行的單元格的背景色變成黃綠顏色

DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.GreenYellow;

行,列表頭部的樣式設定

[C#]

//將列頁眉的背景顏色為眼角

DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Ivory;

//將行頁眉的背景顏色作為陰影

DataGridView1.RowHeadersDefaultCellStyle.BackColor = Color.Lime;

樣式的優先順序

一般單元格的樣式優先順位

  1. DataGridViewCell.Style
  2. DataGridViewRow.DefaultCellStyle
  3. DataGridView.AlternatingRowsDefaultCellStyle
  4. DataGridView.RowsDefaultCellStyle
  5. DataGridViewColumn.DefaultCellStyle
  6. DataGridView.DefaultCellStyle

表頭部的樣式優先順位

  1. DataGridViewCell.Style
  2. DataGridView.RowHeadersDefaultCellStyle
  3. DataGridView.ColumnHeadersDefaultCellStyle
  4. DataGridView.DefaultCellStyle

下例說明

[C#]

//使第一列變成淡藍色

DataGridView1.Columns[0].DefaultCellStyle.BackColor = Color.Aqua;

//把所有列的背景顏色變成黃色

DataGridView1.RowsDefaultCellStyle.BackColor = Color.Yellow;

//使奇數行變成黃綠色

DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.GreenYellow;

//把第三行畫成粉紅色

DataGridView1.Rows[2].DefaultCellStyle.BackColor = Color.Pink;

//獲取自身的單元格樣式和繼承的單元格樣式的背景色

//第一列的單元格樣式

//表示“Acoa”和“[ Acoa ]

Console.WriteLine(DataGridView1.Columns[0].DefaultCellStyle.BackColor);

Console.WriteLine(DataGridView1.Columns[0].InheritedStyle.BackColor);

//第一行的單元格樣式

//表示“Emp晚餐”和“[ Yellow ]

Console.WriteLine(DataGridView1.Rows[0].DefaultCellStyle.BackColor);

Console.WriteLine(DataGridView1.Rows[0].InheritedStyle.BackColor);

//第二行的單元格樣式

//被顯示為“空白空間”和“GreenGreen黃蜂”

Console.WriteLine(DataGridView1.Rows[1].DefaultCellStyle.BackColor);

Console.WriteLine(DataGridView1.Rows[1].InheritedStyle.BackColor);

//第三行的單元格樣式

//被顯示為“CameraPinketal”和“BSPinketal”。

Console.WriteLine(DataGridView1.Rows[2].DefaultCellStyle.BackColor);

Console.WriteLine(DataGridView1.Rows[2].InheritedStyle.BackColor);

//03)的單元格樣式

//被顯示為“空白空間”和“BSPink服務器之間”。

Console.WriteLine(DataGridView1[0, 2].Style.BackColor);

Console.WriteLine(DataGridView1[0, 2].InheritedStyle.BackColor);

 

復數行列的樣式設定

[C#]

//改變奇數列的背景顏色

//有效的方法

DataGridViewCellStyle cellStyle = new DataGridViewCellStyle();

cellStyle.BackColor = Color.Yellow;

for (int i = 0; i < DataGridView1.Columns.Count; i++)

{

    if (i % 2 == 0)

        DataGridView1.Columns[i].DefaultCellStyle = cellStyle;

}

//非效率的方法

for (int i = 0; i < DataGridView1.Columns.Count; i++)

{

    if (i % 2 == 0)

        DataGridView1.Columns[i].DefaultCellStyle.BackColor = Color.Yellow;

}

34. 文字表示位置的設定

單元格的設定

[C#]

//Column1”列的單元格的文本的配置和上下左右都在中央

DataGridView1.Columns["Column1"].DefaultCellStyle.Alignment =

    DataGridViewContentAlignment.MiddleCenter;

表頭的設定

[C#]

//Column1”列的頁眉的文本的配置和上下左右都在中央

DataGridView1.Columns["Column1"].HeaderCell.Style.Alignment =

    DataGridViewContentAlignment.MiddleCenter;

35. 單元格內文字列換行

[C#]

//Column1”列的單元格文本顯示

DataGridView1.Columns["Column1"].DefaultCellStyle.WrapMode =

    DataGridViewTriState.True;

//頁眉也返回顯示,如下

DataGridView1.Columns["Column1"].HeaderCell.Style.WrapMode =

    DataGridViewTriState.True;

36. 單元格DBNull值表示的設定

[C#]

DataGridView1.DefaultCellStyle.NullValue = "(未指定)";

單元格內NullValue屬性設定的值輸入,表示單元格內為Null

[C#]

DataGridView1.DefaultCellStyle.NullValue = "-";

DataGridView1.DefaultCellStyle.DataSourceNullValue = "X";

37. 單元格樣式格式化

[C#]

//列的單元格中的文本格式指定為地區貨幣

DataGridView1.Columns[0].DefaultCellStyle.Format = "c";

DataGridView1.Columns[1].DefaultCellStyle.Format = "c";

//改變第二列的紋理

DataGridView1.Columns[1].DefaultCellStyle.FormatProvider =

    new System.Globalization.CultureInfo("en-US");

38. 指定單元格顏色設定

光標下的單元格顏色自動變換

[C#]

//DataGridView1CellMouseEnter事件處理程序

private void DataGridView1_CellMouseEnter(object sender,

    DataGridViewCellEventArgs e)

{

    //頁眉以外的單元格

    if (e.ColumnIndex >= 0 && e.RowIndex >= 0)

    {

        DataGridView dgv = (DataGridView)sender;

        //改變單元格樣式

        dgv[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.Red;

        dgv[e.ColumnIndex, e.RowIndex].Style.SelectionBackColor = Color.Red;

    }

}

//DataGridView 1CareMouy Lita活動漢劇

private void DataGridView1_CellMouseLeave(object sender,

    DataGridViewCellEventArgs e)

{

    //頁眉以外的單元格

    if (e.ColumnIndex >= 0 && e.RowIndex >= 0)

    {

        DataGridView dgv = (DataGridView)sender;

        //恢復單元格樣式

        //刪除單元格樣式時,可以設置null

        dgv[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.Empty;

        dgv[e.ColumnIndex, e.RowIndex].Style.SelectionBackColor = Color.Empty;

    }

}

表頭部單元格顏色設定

[C#]

//將列頁眉的背景顏色為黃色

DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Yellow;

//將行頁眉的背景顏色變成黃綠顏色

DataGridView1.RowHeadersDefaultCellStyle.BackColor = Color.YellowGreen;

//將左上角的標題單元格的背景色設為藍色

DataGridView1.TopLeftHeaderCell.Style.BackColor = Color.Blue;

39. 單元格文字字體設置

光標下單元格字體設置為粗體

[C#]

//默認單元格樣式

private DataGridViewCellStyle defaultCellStyle;

//鼠標指針下面的單元格樣式

private DataGridViewCellStyle mouseCellStyle;

//格式的短劇

private void Form1_Load(object sender, EventArgs e)

{

    //設置默認的單元格樣式

    this.defaultCellStyle = new DataGridViewCellStyle();

    //設置當前單元格的單元格樣式

    this.mouseCellStyle = new DataGridViewCellStyle();

    this.mouseCellStyle.Font = new Font(DataGridView1.Font,

        DataGridView1.Font.Style | FontStyle.Bold);

}

//DataGridView 1Caretal事件韓劇

private void DataGridView1_CellEnter(object sender,

    DataGridViewCellEventArgs e)

{

    //頁眉以外的單元格

    if (e.ColumnIndex >= 0 && e.RowIndex >= 0)

    {

        DataGridView dgv = (DataGridView)sender;

        //改變單元格樣式

        dgv[e.ColumnIndex, e.RowIndex].Style = this.mouseCellStyle;

    }

}

//DataGridView 1Celealae活動韓劇

private void DataGridView1_CellLeave(object sender,

    DataGridViewCellEventArgs e)

{

    //頁眉以外的單元格

    if (e.ColumnIndex >= 0 && e.RowIndex >= 0)

    {

        DataGridView dgv = (DataGridView)sender;

        //恢復單元格樣式

        //刪除單元格樣式時,可以設置null

        dgv[e.ColumnIndex, e.RowIndex].Style = this.defaultCellStyle;

    }

}

40. 根據單元格值設定單元格樣式

單元格負數情況下顯示黃色,0的情況下顯示紅色

[C#]

// Celermatting事件韓劇

private void DataGridView1_CellFormatting(object sender,

    DataGridViewCellFormattingEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    //確認單元格的列

    if (dgv.Columns[e.ColumnIndex].Name == "Column1" && e.Value is int)

    {

        int val = (int)e.Value;

        //根據單元格的值,改變背景顏色る

        if (val < 0)

        {

            e.CellStyle.BackColor = Color.Yellow;

        }

        else if (val == 0)

        {

            e.CellStyle.BackColor = Color.Red;

        }

    }

}

41. 設置單元格背景顏色

[C#]

//CarePainting事件韓劇

private void DataGridView1_CellPainting(object sender,

    DataGridViewCellPaintingEventArgs e)

{

    //在頁眉以外的單元格中,繪制背景時

    if (e.ColumnIndex >= 0 && e.RowIndex >= 0 &&

        (e.PaintParts & DataGridViewPaintParts.Background) ==

            DataGridViewPaintParts.Background)

    {

        //檢查選擇,決定顏色

        //bColor 1開始顏色,bColor 2結束顏色

        Color bColor1, bColor2;

        if ((e.PaintParts & DataGridViewPaintParts.SelectionBackground) ==

                DataGridViewPaintParts.SelectionBackground &&

            (e.State & DataGridViewElementStates.Selected) ==

                DataGridViewElementStates.Selected)

        {

            bColor1 = e.CellStyle.SelectionBackColor;

            bColor2 = Color.Black;

        }

        else

        {

            bColor1 = e.CellStyle.BackColor;

            bColor2 = Color.LemonChiffon;

        }

        //制作漸變刷

        using (System.Drawing.Drawing2D.LinearGradientBrush b =

            new System.Drawing.Drawing2D.LinearGradientBrush(

            e.CellBounds, bColor1, bColor2,

            System.Drawing.Drawing2D.LinearGradientMode.Horizontal))

        {

            //把單元格塗碎

            e.Graphics.FillRectangle(b, e.CellBounds);

        }

        //顯示背景以外

        DataGridViewPaintParts paintParts =

           e.PaintParts & ~DataGridViewPaintParts.Background;

        //繪制單元格

        e.Paint(e.ClipBounds, paintParts);

        //通知繪制完成

        e.Handled = true;

    }

}

 

單元格背景顯示圖像

[C#]

//顯示在單元格背景下的圖像

private Bitmap cellBackImage = new Bitmap("C:\\back.gif");

//CarePainting事件韓劇

private void DataGridView1_CellPainting(object sender,

    DataGridViewCellPaintingEventArgs e)

{

    //在頁眉以外的單元格中,繪制背景時

    if (e.ColumnIndex >= 0 && e.RowIndex >= 0 &&

        (e.PaintParts & DataGridViewPaintParts.Background) ==

            DataGridViewPaintParts.Background)

    {

        //只繪制背景

        DataGridViewPaintParts backParts = e.PaintParts &

            (DataGridViewPaintParts.Background |

            DataGridViewPaintParts.SelectionBackground);

        e.Paint(e.ClipBounds, backParts);

        //在單元格中心繪制圖像

        int x = e.CellBounds.X +

            (e.CellBounds.Width - cellBackImage.Width) / 2;

        int y = e.CellBounds.Y +

            (e.CellBounds.Height - cellBackImage.Height) / 2;

        e.Graphics.DrawImage(cellBackImage, x, y);

        //顯示背景以外

        DataGridViewPaintParts paintParts =

            e.PaintParts & ~backParts;

        //繪制單元格

        e.Paint(e.ClipBounds, paintParts);

        //通知繪制完成

        e.Handled = true;

    }

}

42. 行樣式描畫

利用RowPostPaint事件描畫

[C#]

//RowPostPaint事件處理程序

private void DataGridView1_RowPostPaint(object sender,

    DataGridViewRowPostPaintEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    //確定線條的顏色

    Pen linePen;

    switch (e.RowIndex % 3)

    {

        case 0:

            linePen = Pens.Blue;

            break;

        case 1:

            linePen = Pens.Green;

            break;

        default:

            linePen = Pens.Red;

            break;

    }

    //計算划線的位置

    int startX = dgv.RowHeadersVisible ? dgv.RowHeadersWidth : 0;

    int startY = e.RowBounds.Top + e.RowBounds.Height - 1;

    int endX = startX + dgv.Columns.GetColumnsWidth(

        DataGridViewElementStates.Visible) -

        dgv.HorizontalScrollingOffset;

    //划線

    e.Graphics.DrawLine(linePen,

        startX, startY, endX, startY);

}

 

利用RowPrePaint事件描畫

[C#]

//RowPrePaint事件處理程序private void DataGridView1_RowPrePaint(object sender,

    DataGridViewRowPrePaintEventArgs e)

{

    //繪制背景

    if ((e.PaintParts & DataGridViewPaintParts.Background) ==

        DataGridViewPaintParts.Background)

    {

        //檢查選擇,決定顏色

        //bColor 1開始顏色,bColor 2結束顏色

        Color bColor1, bColor2;

        if ((e.PaintParts & DataGridViewPaintParts.SelectionBackground) ==

                DataGridViewPaintParts.SelectionBackground &&

            (e.State & DataGridViewElementStates.Selected) ==

                DataGridViewElementStates.Selected)

        {

            bColor1 = e.InheritedRowStyle.SelectionBackColor;

            bColor2 = Color.Black;

        }

        else

        {

            bColor1 = e.InheritedRowStyle.BackColor;

            bColor2 = Color.YellowGreen;

        }

        //計算漸變的范圍

        //只繪制不包含標題的單元格區域

        DataGridView dgv = (DataGridView)sender;

        int rectLeft2 = dgv.RowHeadersVisible ? dgv.RowHeadersWidth : 0;

        int rectLeft = rectLeft2 - dgv.HorizontalScrollingOffset;

        int rectWidth = dgv.Columns.GetColumnsWidth(

            DataGridViewElementStates.Visible);

        Rectangle rect = new Rectangle(rectLeft, e.RowBounds.Top,

            rectWidth, e.RowBounds.Height - 1);

        //制作漸變刷

        using (System.Drawing.Drawing2D.LinearGradientBrush b =

            new System.Drawing.Drawing2D.LinearGradientBrush(

            rect, bColor1, bColor2,

            System.Drawing.Drawing2D.LinearGradientMode.Horizontal))

        {

            //計算要繪制的范圍

            rect.X = rectLeft2;

            rect.Width -= dgv.HorizontalScrollingOffset;

            //把單元格塗碎

            e.Graphics.FillRectangle(b, rect);

        }

        //繪制頁眉

        e.PaintHeader(true);

        //不繪制背景

        e.PaintParts &= ~DataGridViewPaintParts.Background;

    }

}

//ColumnWidthChanged事件處理程序

private void DataGridView1_ColumnWidthChanged(object sender,

    DataGridViewColumnEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    dgv.Invalidate();

}

 

43. 顯示行號

[C#]

//CarePainting事件韓劇

private void DataGridView1_CellPainting(object sender,

    DataGridViewCellPaintingEventArgs e)

{

    //檢查列標題

    if (e.ColumnIndex < 0 && e.RowIndex >= 0)

    {

        //繪制單元格

        e.Paint(e.ClipBounds, DataGridViewPaintParts.All);

        //確定繪制行號的范圍

        //e . AXestiBordersterylee . Cirstyle . Padding是無視的

        Rectangle indexRect = e.CellBounds;

        indexRect.Inflate(-2, -2);

        //繪制行號

        TextRenderer.DrawText(e.Graphics,

            (e.RowIndex + 1).ToString(),

            e.CellStyle.Font,

            indexRect,

            e.CellStyle.ForeColor,

            TextFormatFlags.Right | TextFormatFlags.VerticalCenter);

        //通知繪制完成

        e.Handled = true;

    }

}

利用RowPostPaint事件描畫

[C#]

//RowPostPaint事件處理程序

private void DataGridView1_RowPostPaint(object sender,

    DataGridViewRowPostPaintEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    if (dgv.RowHeadersVisible)

    {

        //確定繪制行號的范圍

        Rectangle rect = new Rectangle(

            e.RowBounds.Left, e.RowBounds.Top,

            dgv.RowHeadersWidth, e.RowBounds.Height);

        rect.Inflate(-2, -2);

        //繪制行號

        TextRenderer.DrawText(e.Graphics,

            (e.RowIndex + 1).ToString(),

            e.InheritedRowStyle.Font,

            rect,

            e.InheritedRowStyle.ForeColor,

            TextFormatFlags.Right | TextFormatFlags.VerticalCenter);

    }

}

44. 焦點所在單元格焦點框不顯示的設定

[C#]

//CarePainting事件韓劇

private void DataGridView1_CellPainting(object sender,

    DataGridViewCellPaintingEventArgs e)

{

    //非標題時

    if (e.ColumnIndex >= 0 && e.RowIndex >= 0)

    {

        //顯示除了聚焦框以外

        DataGridViewPaintParts paintParts =

            e.PaintParts & ~DataGridViewPaintParts.Focus;

        //繪制單元格

        e.Paint(e.ClipBounds, paintParts);

        //通知繪制完成

        e.Handled = true;

    }

}

利用RowPrePaint事件實現

[C#]

//RowPrePaint事件處理程序

private void DataGridView1_RowPrePaint(object sender,

    DataGridViewRowPrePaintEventArgs e)

{

    //不繪制焦點框架

    e.PaintParts &= ~DataGridViewPaintParts.Focus;

}

45. 列中顯示選擇框CheckBox

[C#]

//添加CheckBx

DataGridViewCheckBoxColumn column = new DataGridViewCheckBoxColumn();

DataGridView1.Columns.Add(column);

中間狀態在內的三種狀態表示

[C#]

//顯示3種檢查狀態

DataGridViewCheckBoxColumn column =

    (DataGridViewCheckBoxColumn)DataGridView1.Columns[0];

column.ThreeState = true;

 

46. 中顯示下拉框ComboBox

[C#]

//制作DataGridViewampColumn

DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();

//指定在ComboBox的列表中顯示的項目

column.Items.Add("日曜日");

column.Items.Add("月曜日");

column.Items.Add("火曜日");

column.Items.Add("水曜日");

column.Items.Add("木曜日");

column.Items.Add("金曜日");

column.Items.Add("土曜日");

//顯示“Week”列中綁定的數據

column.DataPropertyName = "Week";

//顯示ComboBox列而不是“Week”列

DataGridView1.Columns.Insert(DataGridView1.Columns["Week"].Index, column);

DataGridView1.Columns.Remove("Week");

column.Name = "Week";

通過列Data綁定設置ComboBox

[C#]

//創建一個用於在ComboBox中顯示的列表

DataTable weekTable = new DataTable("WeekTable");

weekTable.Columns.Add("Display", typeof(string));

weekTable.Columns.Add("Value", typeof(int));

weekTable.Rows.Add("日曜日", 0);

weekTable.Rows.Add("月曜日", 1);

weekTable.Rows.Add("火曜日", 2);

weekTable.Rows.Add("水曜日", 3);

weekTable.Rows.Add("木曜日", 4);

weekTable.Rows.Add("金曜日", 5);

weekTable.Rows.Add("土曜日", 6);

//制作DataGridViewampColumn

DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();

//顯示“Week”列中綁定的數據

column.DataPropertyName = "Week";

//設定DataGridViewampColumnDatasouru

column.DataSource = weekTable;

//實際值為“值”列,顯示的文本為“顯示”列

column.ValueMember = "Value";

column.DisplayMember = "Display";

//添加到DataGridView1

DataGridView1.Columns.Add(column);

默認狀態下,所有下拉框都顯示;DisplayStyleForCurrentCellOnlyTrue的狀態下,當前的單元格顯示下拉框,其余不顯示;還有一種就是光標移動時強調顯示。如下圖左中右三列。

 

47. 單擊打開下拉框

通常情況下要打開下拉框需要點擊目標單元格三次,第一次選中單元格,第二次進入編輯狀態,第三次才能打開下拉框

[C#]

//Caretal事件韓劇

private void DataGridView1_CellEnter(object sender,

    DataGridViewCellEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    if (dgv.Columns[e.ColumnIndex].Name == "ComboBox" &&

       dgv.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn)

    {

        SendKeys.Send("{F4}");

    }

}

48. 中顯示按鈕

[C#]

// DataGridViewButtonColumn的制作

DataGridViewButtonColumn column = new DataGridViewButtonColumn();

//設置列的名稱

column.Name = "Button";

/ /在所有的按鈕上顯示“詳細閱覽”

column.UseColumnTextForButtonValue = true;

column.Text = "詳細閱覽";

添加到//DataGridView

DataGridView1.Columns.Add(column);

按鈕按下事件取得

[C#]

//Celertent Click事件韓劇

private void DataGridView1_CellContentClick(object sender,

    DataGridViewCellEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    //Button”列的話,按鈕被點擊了

    if (dgv.Columns[e.ColumnIndex].Name == "Button")

    {

        MessageBox.Show(e.RowIndex.ToString() +

            "行的按鈕被點擊了");

    }

}

49. 中顯示鏈接

[C#]

//創建DataGridViewLinkColumn

DataGridViewLinkColumn column = new DataGridViewLinkColumn();

//設置列的名稱

column.Name = "Link";

//在所有鏈接上顯示“詳細閱覽”

column.UseColumnTextForLinkValue = true;

column.Text = "詳細閱覽";

//鼠標指針在鏈接上的時候只需下線

column.LinkBehavior = LinkBehavior.HoverUnderline;

//自動訪問

//默認

column.TrackVisitedState = true;

//添加到DataGridView

DataGridView1.Columns.Add(column);

鏈接按下事件取得

[C#]

//Celertent Click事件韓劇

private void DataGridView1_CellContentClick(object sender,

    DataGridViewCellEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    //Link”列的話,按鈕被點擊了

    if (dgv.Columns[e.ColumnIndex].Name == "Link")

    {

        MessageBox.Show(e.RowIndex.ToString() +

            "單擊行中的鏈接。");

        //訪問

        DataGridViewLinkCell cell =

            (DataGridViewLinkCell)dgv[e.ColumnIndex, e.RowIndex];

        cell.LinkVisited = true;

    }

}

50. 中顯示圖像

[C#]

//創建DataGridViewImageColumn

DataGridViewImageColumn column = new DataGridViewImageColumn();

//設置列的名稱

column.Name = "Image";

//不是Icon型,而是顯示Image型的數據

//默認False變更的,所以沒有必要

column.ValuesAreIcons = false;

//設置顯示在沒有設定值的單元格中的圖像

column.Image = new Bitmap("C:\\null.gif");

//保持垂直比例,放大顯示圖像

column.ImageLayout = DataGridViewImageCellLayout.Zoom;

//圖像說明

//將單元格復制到剪切板時使用

column.Description = "圖像";

//添加到DataGridView

DataGridView1.Columns.Add(column);

//更改“圖像”列頂部的單元格圖像

DataGridView1["Image", 0].Value = new Bitmap("C:\\top.gif");

圖片屬性單元格未設值時紅差不顯示的設定

[C#]

//獲取圖像列

DataGridViewImageColumn imageColumn =

    (DataGridViewImageColumn)DataGridView1.Columns["Image"];

//將單元格樣式的NullValue設置為null

imageColumn.DefaultCellStyle.NullValue = null;

51. 編輯中單元格控件取得

[C#]

//Editing聯合活動韓劇

private void DataGridView1_EditingControlShowing(object sender,

    DataGridViewEditingControlShowingEventArgs e)

{

    //檢查顯示的控件是否為DataGridViewTextBoxEditingControl

    if (e.Control is DataGridViewTextBoxEditingControl)

    {

        DataGridView dgv = (DataGridView)sender;

        //獲得編輯所顯示的控制

        DataGridViewTextBoxEditingControl tb =

            (DataGridViewTextBoxEditingControl)e.Control;

        /也可以如下

        //TextBox tb = (TextBox)e.Control;

        //通過列更改IME的模式

        if (dgv.CurrentCell.OwningColumn.Name == "Column1")

            tb.ImeMode = ImeMode.Disable;

        else

            tb.ImeMode = dgv.ImeMode;

    }

}

其他控件以此類推,比如DataGridViewCheckBoxColumn或者DataGridViewButtonColumn等等。

52. 輸入自動完成

[C#]

AutoCompleteStringCollection autoCompleteSource =

    new AutoCompleteStringCollection();

//Editing聯合活動韓劇

private void DataGridView1_EditingControlShowing(object sender,

    DataGridViewEditingControlShowingEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    if (e.Control is TextBox)

    {

        //獲得編輯所顯示的文本框

        TextBox tb = (TextBox)e.Control;

        //相應地調查

        if (dgv.CurrentCell.OwningColumn.Name == "Column1")

        {

            //啟用自動壓縮機

            tb.AutoCompleteMode = AutoCompleteMode.SuggestAppend;

            tb.AutoCompleteSource = AutoCompleteSource.CustomSource;

            tb.AutoCompleteCustomSource = this.autoCompleteSource;

        }

        else

        {

            //禁用自動完成

            tb.AutoCompleteMode = AutoCompleteMode.None;

        }

    }

}

//DataSourceChanged事件韓劇

private void DataGridView1_DataSourceChanged(object sender, EventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    //初始化自動壓縮機列表

    this.autoCompleteSource.Clear();

    //DataGridView中的數據添加到列表

    foreach (DataGridViewRow r in dgv.Rows)

    {

        //獲取單元格值

        string val = r.Cells["Column1"].Value as string;

        if (!string.IsNullOrEmpty(val) &&

            !this.autoCompleteSource.Contains(val))

        {

            //添加到自動壓縮機列表

            autoCompleteSource.Add(val);

        }

    }

}

//CellValueChanged事件處理程序

private void DataGridView1_CellValueChanged(object sender,

    DataGridViewCellEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    //相應地調查

    if (dgv.Columns[e.ColumnIndex].Name == "Column1")

    {

        //獲取單元格值

        string val = dgv[e.ColumnIndex, e.RowIndex].Value as string;

        if (!string.IsNullOrEmpty(val) &&

            !this.autoCompleteSource.Contains(val))

        {

            //添加到自動壓縮機列表

            autoCompleteSource.Add(val);

        }

    }

}

53. 單元格編輯時鍵盤KEY事件取得

[C#]

//Editing聯合活動韓劇

private void DataGridView1_EditingControlShowing(object sender,

    DataGridViewEditingControlShowingEventArgs e)

{

    //檢查顯示的控件是否為DataGridViewTextBoxEditingControl

    if (e.Control is DataGridViewTextBoxEditingControl)

    {

        DataGridView dgv = (DataGridView)sender;

        //獲得編輯所顯示的控制

        DataGridViewTextBoxEditingControl tb =

            (DataGridViewTextBoxEditingControl)e.Control;

        //刪除事件

        tb.KeyPress -=

            new KeyPressEventHandler(dataGridViewTextBox_KeyPress);

        //相應地調查

        if (dgv.CurrentCell.OwningColumn.Name == "Column1")

        {

            //添加KeyPress事件處理程序

            tb.KeyPress +=

                new KeyPressEventHandler(dataGridViewTextBox_KeyPress);

        }

    }

}

//DataGridView中顯示的文本框的KeyPres事件

private void dataGridViewTextBox_KeyPress(object sender,

    KeyPressEventArgs e)

{

    //只需輸入數字

    if (e.KeyChar < '0' || e.KeyChar > '9')

    {

        e.Handled = true;

    }

}

54. 下拉框(ComboBox)單元格編輯時事件取得

[C#]

private DataGridViewComboBoxEditingControl dataGridViewComboBox = null;

//Editing聯合活動韓劇

private void DataGridView1_EditingControlShowing(object sender,

    DataGridViewEditingControlShowingEventArgs e)

{

    //顯示的控制是Dat a G r i d V V V V Viewamiting管理

    if (e.Control is DataGridViewComboBoxEditingControl)

    {

        DataGridView dgv = (DataGridView)sender;

        //相應地調查

        if (dgv.CurrentCell.OwningColumn.Name == "ComboBox")

        {

            //獲得編輯所顯示的控制

            this.dataGridViewComboBox =

                (DataGridViewComboBoxEditingControl)e.Control;

            //添加“SelectadIndeChanged事件”事件

            this.dataGridViewComboBox.SelectedIndexChanged +=

                new EventHandler(dataGridViewComboBox_SelectedIndexChanged);

        }

    }

}

//CellEndEdit事件處理程序

private void DataGridView1_CellEndEdit(object sender,

    DataGridViewCellEventArgs e)

{

    //刪除“SelectadIndeChanged事件”事件

    if (this.dataGridViewComboBox != null)

    {

        this.dataGridViewComboBox.SelectedIndexChanged -=

            new EventHandler(dataGridViewComboBox_SelectedIndexChanged);

        this.dataGridViewComboBox = null;

    }

}

//DataGridView中顯示的轉換器的

//SelectadIndeChanged事件韓劇

private void dataGridViewComboBox_SelectedIndexChanged(object sender,

    EventArgs e)

{

    //顯示選擇的項目

    DataGridViewComboBoxEditingControl cb =

        (DataGridViewComboBoxEditingControl)sender;

    Console.WriteLine(cb.SelectedItem);

}

55. 下拉框(ComboBox)單元格允許文字輸入設定

[C#]

//Editing聯合活動韓劇

private void DataGridView1_EditingControlShowing(object sender,

    DataGridViewEditingControlShowingEventArgs e)

{

    if (e.Control is DataGridViewComboBoxEditingControl)

    {

        //相應地調查

        DataGridView dgv = (DataGridView)sender;

        if (dgv.CurrentCell.OwningColumn.Name == "ComboBox")

        {

            //獲得編輯所顯示的控制

            DataGridViewComboBoxEditingControl cb =

                (DataGridViewComboBoxEditingControl)e.Control;

            cb.DropDownStyle = ComboBoxStyle.DropDown;

        }

    }

}

//CellValidating事件處理程序

private void DataGridView1_CellValidating(object sender,

    DataGridViewCellValidatingEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    //相應地調查

    if (dgv.Columns[e.ColumnIndex].Name == "ComboBox" &&

        dgv.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn)

    {

        DataGridViewComboBoxColumn cbc =

            (DataGridViewComboBoxColumn)dgv.Columns[e.ColumnIndex];

        //添加到轉換器的項目

        if (!cbc.Items.Contains(e.FormattedValue))

        {

            cbc.Items.Add(e.FormattedValue);

        }

    }

}

56. 根據值不同在另一列中顯示相應圖片

[C#]

using System;

using System.ComponentModel;

using System.Windows.Forms;

/// <summary>

/// 根據單元格的值,顯示適當的圖標

/// </summary>

public class DataGridViewErrorIconColumn : DataGridViewImageColumn

{

    public DataGridViewErrorIconColumn()

    {

        this.CellTemplate = new DataGridViewErrorIconCell();

        this.ValueType = this.CellTemplate.ValueType;

    }

}

/// <summary>

///根據單元格的值,顯示適當的圖標

/// </summary>

public class DataGridViewErrorIconCell : DataGridViewImageCell

{

    public DataGridViewErrorIconCell()

    {

        this.ValueType = typeof(int);

    }

    protected override object GetFormattedValue(

        object value, int rowIndex,

        ref DataGridViewCellStyle cellStyle,

        TypeConverter valueTypeConverter,

        TypeConverter formattedValueTypeConverter,

        DataGridViewDataErrorContexts context)

    {

        //值為0時為信息,1時為警告,2時顯示錯誤圖標

        switch ((int)value)

        {

            case 1:

                return SystemIcons.Information;

            case 2:

                return SystemIcons.Warning;

            case 3:

                return SystemIcons.Error;

            default:

                return null;

        }

    }

    public override object DefaultNewRowValue

    {

        get

        {

            return 0;

        }

    }

}

用法如下

[C#]

//制作DataGridViewErrorICOColumn

DataGridViewErrorIconColumn iconColumn =

    new DataGridViewErrorIconColumn();

//拉攏Column一列(整數型)

iconColumn.DataPropertyName = "Column1";

//添加到DataGridView

DataGridView1.Columns.Add(iconColumn);

 

57. 中顯示進度條(ProgressBar

[C#]

using System;

using System.Drawing;

using System.Windows.Forms;

/// <summary>

///DatagridViewchsBarCel對象列

/// </summary>

public class DataGridViewProgressBarColumn : DataGridViewTextBoxColumn

{

    //轉換器

    public DataGridViewProgressBarColumn()

    {

        this.CellTemplate = new DataGridViewProgressBarCell();

    }

    //檢索和設置CellTemplate

    public override DataGridViewCell CellTemplate

    {

        get

        {

            return base.CellTemplate;

        }

        set

        {

            //除了DataGridViewchsBarCel以外不做主機

            if (!(value is DataGridViewProgressBarCell))

            {

                throw new InvalidCastException(

                    "DatagridViewchsBarCel對象" +

                    "請指定");

            }

            base.CellTemplate = value;

        }

    }

    /// <summary>

    /// 顯示的最大值的最大數量

    /// </summary>

    public int Maximum

    {

        get

        {

            return ((DataGridViewProgressBarCell)this.CellTemplate).Maximum;

        }

        set

        {

            if (this.Maximum == value)

                return;

            //更改單元格模板的值

            ((DataGridViewProgressBarCell)this.CellTemplate).Maximum =

                value;

            //改變已添加到DataGridView的單元格的值

            if (this.DataGridView == null)

                return;

            int rowCount = this.DataGridView.RowCount;

            for (int i = 0; i < rowCount; i++)

            {

                DataGridViewRow r = this.DataGridView.Rows.SharedRow(i);

                ((DataGridViewProgressBarCell)r.Cells[this.Index]).Maximum =

                    value;

            }

        }

    }

    /// <summary>

    /// 最小值

    /// </summary>

    public int Mimimum

    {

        get

        {

            return ((DataGridViewProgressBarCell)this.CellTemplate).Mimimum;

        }

        set

        {

            if (this.Mimimum == value)

                return;

            //更改單元格模板的值

            ((DataGridViewProgressBarCell)this.CellTemplate).Mimimum =

                value;

            //改變已添加到DataGridView的單元格的值

            if (this.DataGridView == null)

                return;

            int rowCount = this.DataGridView.RowCount;

            for (int i = 0; i < rowCount; i++)

            {

                DataGridViewRow r = this.DataGridView.Rows.SharedRow(i);

                ((DataGridViewProgressBarCell)r.Cells[this.Index]).Mimimum =

                    value;

            }

        }

    }

}

/// <summary>

///DataGridView中顯示一個示例

/// </summary>

public class DataGridViewProgressBarCell : DataGridViewTextBoxCell

{

    //轉換器

    public DataGridViewProgressBarCell()

    {

        this.maximumValue = 100;

        this.mimimumValue = 0;

    }

    private int maximumValue;

    public int Maximum

    {

        get

        {

            return this.maximumValue;

        }

        set

        {

            this.maximumValue = value;

        }

    }

    private int mimimumValue;

    public int Mimimum

    {

        get

        {

            return this.mimimumValue;

        }

        set

        {

            this.mimimumValue = value;

        }

    }

    //指定單元格值的數據類型

    //這里是整數型

    public override Type ValueType

    {

        get

        {

            return typeof(int);

        }

    }

    //指定新記錄行的單元格的既定值

    public override object DefaultNewRowValue

    {

        get

        {

            return 0;

        }

    }

    //因為添加了新屬性,所以

    // 需要超過Clo方法

    public override object Clone()

    {

        DataGridViewProgressBarCell cell =

            (DataGridViewProgressBarCell)base.Clone();

        cell.Maximum = this.Maximum;

        cell.Mimimum = this.Mimimum;

        return cell;

    }

    protected override void Paint(Graphics graphics,

        Rectangle clipBounds, Rectangle cellBounds,

        int rowIndex, DataGridViewElementStates cellState,

        object value, object formattedValue, string errorText,

        DataGridViewCellStyle cellStyle,

        DataGridViewAdvancedBorderStyle advancedBorderStyle,

        DataGridViewPaintParts paintParts)

    {

        //決定值

        int intValue = 0;

        if (value is int)

            intValue = (int)value;

        if (intValue < this.mimimumValue)

            intValue = this.mimimumValue;

        if (intValue > this.maximumValue)

            intValue = this.maximumValue;

        //計算百分比

        double rate = (double)(intValue - this.mimimumValue) /

            (this.maximumValue - this.mimimumValue);

        //繪制單元格的邊界線

        if ((paintParts & DataGridViewPaintParts.Border) ==

            DataGridViewPaintParts.Border)

        {

            this.PaintBorder(graphics, clipBounds, cellBounds,

                cellStyle, advancedBorderStyle);

        }

        //在邊界線內側取得范圍

        Rectangle borderRect = this.BorderWidths(advancedBorderStyle);

        Rectangle paintRect = new Rectangle(

            cellBounds.Left + borderRect.Left,

            cellBounds.Top + borderRect.Top,

            cellBounds.Width - borderRect.Right,

            cellBounds.Height - borderRect.Bottom);

        //決定背景顏色

        //在未選擇時更改顏色

        bool isSelected =

            (cellState & DataGridViewElementStates.Selected) ==

            DataGridViewElementStates.Selected;

        Color bkColor;

        if (isSelected &&

            (paintParts & DataGridViewPaintParts.SelectionBackground) ==

                DataGridViewPaintParts.SelectionBackground)

        {

            bkColor = cellStyle.SelectionBackColor;

        }

        else

        {

            bkColor = cellStyle.BackColor;

        }

        //繪制背景

        if ((paintParts & DataGridViewPaintParts.Background) ==

            DataGridViewPaintParts.Background)

        {

            using (SolidBrush backBrush = new SolidBrush(bkColor))

            {

                graphics.FillRectangle(backBrush, paintRect);

            }

        }

        //扣除Padding

        paintRect.Offset(cellStyle.Padding.Right, cellStyle.Padding.Top);

        paintRect.Width -= cellStyle.Padding.Horizontal;

        paintRect.Height -= cellStyle.Padding.Vertical;

        //繪制程序

        if ((paintParts & DataGridViewPaintParts.ContentForeground) ==

            DataGridViewPaintParts.ContentForeground)

        {

            if (ProgressBarRenderer.IsSupported)

            {

                //visual風格繪制

                //繪制序號

                ProgressBarRenderer.DrawHorizontalBar(graphics, paintRect);

                //在顯示欄上繪制欄

                Rectangle barBounds = new Rectangle(

                    paintRect.Left + 3, paintRect.Top + 3,

                    paintRect.Width - 4, paintRect.Height - 6);

                barBounds.Width = (int)Math.Round(barBounds.Width * rate);

                ProgressBarRenderer.DrawHorizontalChunks(graphics, barBounds);

            }

            else

            {

                //無法在視覺樣式中繪制時

                graphics.FillRectangle(Brushes.White, paintRect);

                graphics.DrawRectangle(Pens.Black, paintRect);

                Rectangle barBounds = new Rectangle(

                    paintRect.Left + 1, paintRect.Top + 1,

                    paintRect.Width - 1, paintRect.Height - 1);

                barBounds.Width = (int)Math.Round(barBounds.Width * rate);

                graphics.FillRectangle(Brushes.Blue, barBounds);

            }

        }

        //顯示焦點的框架

        if (this.DataGridView.CurrentCellAddress.X == this.ColumnIndex &&

            this.DataGridView.CurrentCellAddress.Y == this.RowIndex &&

            (paintParts & DataGridViewPaintParts.Focus) ==

                DataGridViewPaintParts.Focus &&

            this.DataGridView.Focused)

        {

            //適當決定聚焦框的大小

            Rectangle focusRect = paintRect;

            focusRect.Inflate(-3, -3);

            ControlPaint.DrawFocusRectangle(graphics, focusRect);

            //指定背景色並繪制焦點框時

            //ControlPaint.DrawFocusRectangle(

            //    graphics, focusRect, Color.Empty, bkColor);

        }

        //顯示文本

        if ((paintParts & DataGridViewPaintParts.ContentForeground) ==

            DataGridViewPaintParts.ContentForeground)

        {

            //確定要顯示的文本

            string txt = string.Format("{0}%", Math.Round(rate * 100));

            //string txt = formattedValue.ToString();

            //原本,應該根據cellStyle決定TextFormatFlags

            TextFormatFlags flags = TextFormatFlags.HorizontalCenter |

                TextFormatFlags.VerticalCenter;

            //確定顏色

            Color fColor = cellStyle.ForeColor;

            //if (isSelected)

            //    fColor = cellStyle.SelectionForeColor;

            //else

            //    fColor = cellStyle.ForeColor;

            //繪制文本

            paintRect.Inflate(-2, -2);

            TextRenderer.DrawText(graphics, txt, cellStyle.Font,

                paintRect, fColor, flags);

        }

        //顯示錯誤圖標

        if ((paintParts & DataGridViewPaintParts.ErrorIcon) ==

            DataGridViewPaintParts.ErrorIcon &&

            this.DataGridView.ShowCellErrors &&

            !string.IsNullOrEmpty(errorText))

        {

            //取得顯示錯誤圖標的區域

            Rectangle iconBounds = this.GetErrorIconBounds(

                graphics, cellStyle, rowIndex);

            iconBounds.Offset(cellBounds.X, cellBounds.Y);

            //繪制錯誤圖標

            this.PaintErrorIcon(graphics, iconBounds, cellBounds, errorText);

        }

    }

}

用法如下

[C#]

//制作Data GridViewensBarColumn

DataGridViewProgressBarColumn pbColumn =

    new DataGridViewProgressBarColumn();

//綁定數據源中的列1

pbColumn.DataPropertyName = "Column1";

//添加列

DataGridView1.Columns.Add(pbColumn);

 

58. 中添加MaskedTextBox

[C#]

using System;

using System.Windows.Forms;

/// <summary>

/// 表示Data GridViewMaskelxCel對象的列。

/// </summary>

public class DataGridViewMaskedTextBoxColumn :

    DataGridViewColumn

{

    //指定作為CareTempatoData GridViewMaskadkelxCel對象

    //調用基本類的轉換器

    public DataGridViewMaskedTextBoxColumn()

        : base(new DataGridViewMaskedTextBoxCell())

    {

    }

    private string maskValue = "";

    /// <summary>

    /// 適用於MaskadTetBxMask屬性的值

    /// </summary>

    public string Mask

    {

        get

        {

            return this.maskValue;

        }

        set

        {

            this.maskValue = value;

        }

    }

    //因為添加了新屬性,所以

    // 需要超過Clo方法

    public override object Clone()

    {

        DataGridViewMaskedTextBoxColumn col =

            (DataGridViewMaskedTextBoxColumn)base.Clone();

        col.Mask = this.Mask;

        return col;

    }

    //檢索和設置CellTemplate

    public override DataGridViewCell CellTemplate

    {

        get

        {

            return base.CellTemplate;

        }

        set

        {

            //只能說一句話

            // 阻止為CellTemplate設置

            if (!(value is DataGridViewMaskedTextBoxCell))

            {

                throw new InvalidCastException(

                    "Dat a GridViewMaskadtemtvxCel對象" +

                    "請指定");

            }

            base.CellTemplate = value;

        }

    }

}

/// <summary>

///可以在MaskadTectBx中編輯的文本信息

/// 顯示在DataGridView控件中。

/// </summary>

public class DataGridViewMaskedTextBoxCell :

    DataGridViewTextBoxCell

{

    //コンストラクタ

    public DataGridViewMaskedTextBoxCell()

    {

    }

    //初始化編輯控件

    //編輯控制需要在另一個單元格和列中使用,因此需要初始化

    public override void InitializeEditingControl(

        int rowIndex, object initialFormattedValue,

        DataGridViewCellStyle dataGridViewCellStyle)

    {

        base.InitializeEditingControl(rowIndex,

            initialFormattedValue, dataGridViewCellStyle);

        //獲取編輯控制

        DataGridViewMaskedTextBoxEditingControl maskedBox =

            this.DataGridView.EditingControl as

            DataGridViewMaskedTextBoxEditingControl;

        if (maskedBox != null)

        {

            //設置Tect

            maskedBox.Text =

                this.Value != null ? this.Value.ToString() : "";

            //反映自定義列屬性

            DataGridViewMaskedTextBoxColumn column =

                this.OwningColumn as DataGridViewMaskedTextBoxColumn;

            if (column != null)

            {

                maskedBox.Mask = column.Mask;

            }

        }

    }

    //指定編輯控制的類型

    public override Type EditType

    {

        get

        {

            return typeof(DataGridViewMaskedTextBoxEditingControl);

        }

    }

    //指定單元格值的數據類型

    //在這里,作為Object

    //和基本班一樣,沒有必要超重

    public override Type ValueType

    {

        get

        {

            return typeof(object);

        }

    }

    //指定新記錄行的單元格的既定值

    public override object DefaultNewRowValue

    {

        get

        {

            return base.DefaultNewRowValue;

        }

    }

}

/// <summary>

/// Data GridViewMaskadTectvxCel來擔任主機

/// 表示MaskedTextBox控件。

/// </summary>

public class DataGridViewMaskedTextBoxEditingControl :

    MaskedTextBox, IDataGridViewEditingControl

{

    //顯示了編輯控制的DataGridView

    DataGridView dataGridView;

    //顯示編輯控制的行

    int rowIndex;

    //編輯控制的值和單元格的值是否不同

    bool valueChanged;

    //轉換器

    public DataGridViewMaskedTextBoxEditingControl()

    {

        this.TabStop = false;

    }

    #region IDataGridViewEditingControl 成員

    //由編輯控制改變的單元格的值

    public object GetEditingControlFormattedValue(

        DataGridViewDataErrorContexts context)

    {

        return this.Text;

    }

    //由編輯控制改變的單元格的值

    public object EditingControlFormattedValue

    {

        get

        {

            return this.GetEditingControlFormattedValue(

                DataGridViewDataErrorContexts.Formatting);

        }

        set

        {

            this.Text = (string)value;

        }

    }

    //將單元格樣式應用於編輯控制

//將編輯控制的前景色,背景顏色,字體等組合成單元格樣式

    public void ApplyCellStyleToEditingControl(

        DataGridViewCellStyle dataGridViewCellStyle)

    {

        this.Font = dataGridViewCellStyle.Font;

        this.ForeColor = dataGridViewCellStyle.ForeColor;

        this.BackColor = dataGridViewCellStyle.BackColor;

        switch (dataGridViewCellStyle.Alignment)

        {

            case DataGridViewContentAlignment.BottomCenter:

            case DataGridViewContentAlignment.MiddleCenter:

            case DataGridViewContentAlignment.TopCenter:

                this.TextAlign = HorizontalAlignment.Center;

                break;

            case DataGridViewContentAlignment.BottomRight:

            case DataGridViewContentAlignment.MiddleRight:

            case DataGridViewContentAlignment.TopRight:

                this.TextAlign = HorizontalAlignment.Right;

                break;

            default:

                this.TextAlign = HorizontalAlignment.Left;

                break;

        }

    }

    //有編輯單元格的DataGridView

    public DataGridView EditingControlDataGridView

    {

        get

        {

            return this.dataGridView;

        }

        set

        {

            this.dataGridView = value;

        }

    }

    //正在編輯的行的索引

    public int EditingControlRowIndex

    {

        get

        {

            return this.rowIndex;

        }

        set

        {

            this.rowIndex = value;

        }

    }

    //值是否改變

    //編輯控制的值和單元格的值是否不同

    public bool EditingControlValueChanged

    {

        get

        {

            return this.valueChanged;

        }

        set

        {

            this.valueChanged = value;

        }

    }

//指定的鍵由DataGridView處理,還是編輯控制?

    //重回跟蹤,編輯控制處理

    //dataGridViewWantsInputKeyTrue時,DataGridView可以處理

    public bool EditingControlWantsInputKey(

        Keys keyData, bool dataGridViewWantsInputKey)

    {

        //Keys.REF.RightRightHomeEnd的時候,還將返回

        //如果不這樣做,用這些鍵把焦點轉移到另一個單元格里

        switch (keyData & Keys.KeyCode)

        {

            case Keys.Right:

            case Keys.End:

            case Keys.Left:

            case Keys.Home:

                return true;

            default:

                return false;

        }

    }

    //鼠標光標指定在Editing Panel上時的光標

    //EditingPanel是用於托管編輯控件的面板。

    //編輯控件小於單元時,控件以外的部分變為面板

    public Cursor EditingPanelCursor

    {

        get

        {

            return base.Cursor;

        }

    }

    //以控制方式進行編輯

    //將文本作為選擇狀態,或將插入指針作為結尾

    public void PrepareEditingControlForEdit(bool selectAll)

    {

        if (selectAll)

        {

            //處於選擇狀態

            this.SelectAll();

        }

        else

        {

            //把插入指針放在末尾

            this.SelectionStart = this.TextLength;

        }

    }

//值更改時是否更改單元格的位置

    //當值改變時,編輯控制的大小被改變時

    public bool RepositionEditingControlOnValueChange

    {

        get

        {

            return false;

        }

    }

    #endregion

    //值已更改

    protected override void OnTextChanged(EventArgs e)

    {

        base.OnTextChanged(e);

        //通知DataGridView值已更改

        this.valueChanged = true;

        this.dataGridView.NotifyCurrentCellDirty(true);

    }

}

用法如下

[C#]

//制作Dat at ag idViewMaskadTectvxColumn

DataGridViewMaskedTextBoxColumn maskedColumn =

    new DataGridViewMaskedTextBoxColumn();

//顯示數據源的“Column1

maskedColumn.DataPropertyName = "Column1";

//設定MaskadTetBxMask屬性的值

maskedColumn.Mask = "000";

//DataGridView中添加列

DataGridView1.Columns.Add(maskedColumn);

59. Enter鍵按下焦點移至旁邊的單元格

[C#]

using System;

using System.Windows.Forms;

/// <summary>

///在按鈕被按下時,與Tab鍵按下的相同動作

/// (將現在的單元格移動到旁邊的單元格)DataGridView

/// </summary>

public class DataGridViewEx : DataGridView

{

    protected override bool ProcessDialogKey(Keys keyData)

    {

        //當按下EEB鍵時,Tab鍵被推了

        if ((keyData & Keys.KeyCode) == Keys.Enter)

        {

            return this.ProcessTabKey(keyData);

        }

        return base.ProcessDialogKey(keyData);

    }

    protected override bool ProcessDataGridViewKey(KeyEventArgs e)

    {

        //當按下EEB鍵時,Tab鍵被推了

        if (e.KeyCode == Keys.Enter)

        {

            return this.ProcessTabKey(e.KeyCode);

        }

        return base.ProcessDataGridViewKey(e);

    }

}

60. 行集合化(Group

[C#]

//默認單元格樣式

private DataGridViewCellStyle defaultCellStyle;

//分組的頂部行的單元格樣式

private DataGridViewCellStyle groupCellStyle;

//格式的短劇

private void Form1_Load(object sender, EventArgs e)

{

    //設置單元格樣式

    this.defaultCellStyle = new DataGridViewCellStyle();

    this.groupCellStyle = new DataGridViewCellStyle();

    this.groupCellStyle.ForeColor = Color.White;

    this.groupCellStyle.BackColor = Color.DarkGreen;

    this.groupCellStyle.SelectionBackColor = Color.DarkBlue;

}

//Carelmatting事件韓劇

private void DataGridView1_CellFormatting(object sender,

    DataGridViewCellFormattingEventArgs e)

{

    DataGridView dgv = (DataGridView)sender;

    //單元格是第一列,不是頁眉,也不是新的行時

    if (e.ColumnIndex == 0 && e.RowIndex >= 0 &&

        e.RowIndex != dgv.NewRowIndex)

    {

        if (e.RowIndex == 0 ||

            !dgv[e.ColumnIndex, e.RowIndex - 1].Value.Equals(e.Value))

        {

            //第一行或與上單元格不同的值時,改變背景顏色

            dgv.Rows[e.RowIndex].DefaultCellStyle = this.groupCellStyle;

        }

        else

        {

            dgv.Rows[e.RowIndex].DefaultCellStyle = this.defaultCellStyle;

            e.Value = "";

            e.FormattingApplied = true;

        }

    }

}

 


免責聲明!

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



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