DataGridView控件用法合集(上)

1. DataGridView当前的单元格属性取得、变更
2. DataGridView编辑属性
3. DataGridView最下面一列新追加行非表示
4. DataGridView判断当前选中行是否为新追加的行
5. DataGridView删除行可否设定
6. DataGridView行列不表示和删除
7. DataGridView行列宽度高度设置为不能编辑
8. DataGridView行高列幅自动调整
9. DataGridView指定行列冻结
10. DataGridView列顺序变更可否设定
11. DataGridView行复数选择
12. DataGridView选择的行、列、单元格取得
13. DataGridView指定单元格是否表示
14. DataGridView表头部单元格取得
15. DataGridView表头部单元格文字列设定
16. DataGridView选择的部分拷贝至剪贴板
17. DataGridView粘贴
18. DataGridView单元格上ToolTip表示设定(鼠标移动到相应单元格上时,弹出说明信息)
19. DataGridView中的ContextMenuStrip属性
20. DataGridView指定滚动框位置
21. DataGridView手动追加列
22. DataGridView全体分界线样式设置
23. DataGridView根据单元格属性更改显示内容
24. DataGridView新追加行的行高样式设置る
25. DataGridView新追加行单元格默认值设置
26. DataGridView单元格数据错误标签表示
27. DataGridView单元格内输入值正确性判断
28. DataGridView单元格输入错误值事件的捕获
29. DataGridView行排序(点击列表头自动排序的设置)
30. DataGridView自动行排序(新追加值也会自动排序)
31. DataGridView自动行排序禁止情况下的排序
32. DataGridView指定列指定排序
33. DataGridView单元格样式设置

1.当前的单元格属性取得、变更
[VB.NET]
'現在のセルの値を表示
Console.WriteLine(DataGridView1.CurrentCell.Value)
'現在のセルの列インデックスを表示
Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex)
'現在のセルの行インデックスを表示
Console.WriteLine(DataGridView1.CurrentCell.RowIndex)
'(0, 0)を現在のセルにする
DataGridView1.CurrentCell = DataGridView1(0, 0)
[C#]
//現在のセルの値を表示
Console.WriteLine(DataGridView1.CurrentCell.Value);
//現在のセルの列インデックスを表示
Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex);
//現在のセルの行インデックスを表示
Console.WriteLine(DataGridView1.CurrentCell.RowIndex);
//(0, 0)を現在のセルにする
DataGridView1.CurrentCell = DataGridView1[0, 0];

2.DataGridView编辑属性
全部单元格编辑属性
[VB.NET]
'DataGridView1のセルを読み取り専用にする
DataGridView1.ReadOnly = True
[C#]
//DataGridView1のセルを読み取り専用にする
DataGridView1.ReadOnly = true;
指定行列单元格编辑属性
[VB.NET]
'DataGridView1の2番目の列を読み取り専用にする
DataGridView1.Columns(1).ReadOnly = True
'DataGridView1の3番目の行を読み取り専用にする
DataGridView1.Rows(2).ReadOnly = True
'DataGridView1の(0, 0)のセルを読み取り専用にする
DataGridView1(0, 0).ReadOnly = True
[C#]
//DataGridView1の2番目の列を読み取り専用にする
DataGridView1.Columns[1].ReadOnly = true;
//DataGridView1の3番目の行を読み取り専用にする
DataGridView1.Rows[2].ReadOnly = true;
//DataGridView1の(0, 0)のセルを読み取り専用にする
DataGridView1[0, 0].ReadOnly = true;
根据条件判断单元格的编辑属性
下例中column2的值是True的时候,Column1设为可编辑
[VB.NET]
'CellBeginEditイベントハンドラ
Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, _
ByVal e As DataGridViewCellCancelEventArgs) _
Handles DataGridView1.CellBeginEdit
Dim dgv As DataGridView = CType(sender, DataGridView)
'編集できるか判断する
If dgv.Columns(e.ColumnIndex).Name = "Column1" AndAlso _
Not CBool(dgv("Column2", e.RowIndex).Value) Then
'編集できないようにする
e.Cancel = True
End If
End Sub
[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.DataGridView最下面一列新追加行非表示
[VB.NET]
'DataGridView1にユーザーが新しい行を追加できないようにする
DataGridView1.AllowUserToAddRows = False
[C#]
//DataGridView1にユーザーが新しい行を追加できないようにする
DataGridView1.AllowUserToAddRows = false;

4.判断当前选中行是否为新追加的行
[VB.NET]
If DataGridView1.CurrentRow.IsNewRow Then
Console.WriteLine("現在のセルがある行は、新しい行です。")
Else
Console.WriteLine("現在のセルがある行は、新しい行ではありません。")
End If
[C#]
if (DataGridView1.CurrentRow.IsNewRow)
Console.WriteLine("現在のセルがある行は、新しい行です。");
else
Console.WriteLine("現在のセルがある行は、新しい行ではありません。");

5. DataGridView删除行可否设定
[VB.NET]
'DataGridView1の行をユーザーが削除できないようにする
DataGridView1.AllowUserToDeleteRows = False
[C#]
//DataGridView1の行をユーザーが削除できないようにする
DataGridView1.AllowUserToDeleteRows = false;
根据条件判断当前行是否要删除
[VB.NET]
'DataGridView1のUserDeletingRowイベントハンドラ
Private Sub DataGridView1_UserDeletingRow(ByVal sender As Object, _
ByVal e As DataGridViewRowCancelEventArgs) _
Handles DataGridView1.UserDeletingRow
'削除するかユーザーに確認する
If MessageBox.Show("この列を削除しますか?", "削除の確認", _
MessageBoxButtons.OKCancel, MessageBoxIcon.Question) <> _
Windows.Forms.DialogResult.OK Then
e.Cancel = True
End If
End Sub
[C#]
//DataGridView1のUserDeletingRowイベントハンドラ
private void DataGridView1_UserDeletingRow(
object sender, DataGridViewRowCancelEventArgs e)
{
//削除するかユーザーに確認する
if (MessageBox.Show("この列を削除しますか?",
"削除の確認",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Question) != DialogResult.OK)
{
e.Cancel = true;
}
}

6. DataGridView行列不表示和删除
行列不表示
[VB.NET]
'DataGridView1のはじめの列を非表示にする
DataGridView1.Columns(0).Visible = False
'DataGridView1のはじめの行を非表示にする
DataGridView1.Rows(0).Visible = False
[C#]
//DataGridView1のはじめの列を非表示にする
DataGridView1.Columns[0].Visible = false;
//DataGridView1のはじめの行を非表示にする
DataGridView1.Rows[0].Visible = false;
行列表头部分不表示
[VB.NET]
'列ヘッダーを非表示にする
DataGridView1.ColumnHeadersVisible = False
'行ヘッダーを非表示にする
DataGridView1.RowHeadersVisible = False
[C#]
//列ヘッダーを非表示にする
DataGridView1.ColumnHeadersVisible = false;
//行ヘッダーを非表示にする
DataGridView1.RowHeadersVisible = false;
指定行列删除
[VB.NET]
'"Column1"を削除する
DataGridView1.Columns.Remove("Column1")
'はじめの列を削除する
DataGridView1.Columns.RemoveAt(0)
'はじめの行を削除する
DataGridView1.Rows.RemoveAt(0)
[C#]
//"Column1"を削除する
DataGridView1.Columns.Remove("Column1");
//はじめの列を削除する
DataGridView1.Columns.RemoveAt(0);
//はじめの行を削除する
DataGridView1.Rows.RemoveAt(0);
选择的行列删除(多行列)
[VB.NET]
'DataGridView1で選択されているすべての行を削除する
Dim r As DataGridViewRow
For Each r In DataGridView1.SelectedRows
If Not r.IsNewRow Then
DataGridView1.Rows.Remove(r)
End If
Next r
[C#]
//DataGridView1で選択されているすべての行を削除する
foreach (DataGridViewRow r in DataGridView1.SelectedRows)
{
if (!r.IsNewRow)
{
DataGridView1.Rows.Remove(r);
}
}
(进口轴承 jack jones 火狐浏览器下载 杰克琼斯 )
7. DataGridView行列宽度高度设置为不能编辑
[VB.NET]
'DataGridView1の列の幅をユーザーが変更できないようにする
DataGridView1.AllowUserToResizeColumns = False
'DataGridView1の行の高さをユーザーが変更できないようにする
DataGridView1.AllowUserToResizeRows = False
[C#]
//DataGridView1の列の幅をユーザーが変更できないようにする
DataGridView1.AllowUserToResizeColumns = false;
//DataGridView1の行の高さをユーザーが変更できないようにする
DataGridView1.AllowUserToResizeRows = false;
指定行列宽度高度设置为不能编辑
[VB.NET]
'DataGridView1のはじめの列の幅をユーザーが変更できないようにする
DataGridView1.Columns(0).Resizable = DataGridViewTriState.False
'DataGridView1のはじめの行の高さをユーザーが変更できないようにする
DataGridView1.Rows(0).Resizable = DataGridViewTriState.False
[C#]
//DataGridView1のはじめの列の幅をユーザーが変更できないようにする
DataGridView1.Columns[0].Resizable = DataGridViewTriState.False;
//DataGridView1のはじめの行の高さをユーザーが変更できないようにする
DataGridView1.Rows[0].Resizable = DataGridViewTriState.False;
列幅行高最小值设定
[VB.NET]
'一番はじめの列の幅の最小を100ピクセルとする
DataGridView1.Columns(0).MinimumWidth = 100
'一番はじめの行の高さの最小を50ピクセルとする
DataGridView1.Rows(0).MinimumHeight = 50
[C#]
//一番はじめの列の幅の最小を100ピクセルとする
DataGridView1.Columns[0].MinimumWidth = 100;
//一番はじめの行の高さの最小を50ピクセルとする
DataGridView1.Rows[0].MinimumHeight = 50;
行列表头部分行高列幅设置为不能编辑
[VB.NET]
'列ヘッダーの高さを変更できないようにする
DataGridView1.ColumnHeadersHeightSizeMode = _
DataGridViewColumnHeadersHeightSizeMode.DisableResizing
'行ヘッダーの幅を変更できるようにする
DataGridView1.RowHeadersWidthSizeMode = _
DataGridViewRowHeadersWidthSizeMode.EnableResizing
[C#]
//列ヘッダーの高さを変更できないようにする
DataGridView1.ColumnHeadersHeightSizeMode =
DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
//行ヘッダーの幅を変更できるようにする
DataGridView1.RowHeadersWidthSizeMode =
DataGridViewRowHeadersWidthSizeMode.EnableResizing;
8. DataGridView行高列幅自动调整
[VB.NET]
'ヘッダーとすべてのセルの内容に合わせて、列の幅を自動調整する
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
'ヘッダーとすべてのセルの内容に合わせて、行の高さを自動調整する
DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
[C#]
//ヘッダーとすべてのセルの内容に合わせて、列の幅を自動調整する
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
//ヘッダーとすべてのセルの内容に合わせて、行の高さを自動調整する
DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
表头部分行高列幅自动调整
[VB.NET]
'列ヘッダーの高さが自動調整されるようにする
DataGridView1.ColumnHeadersHeightSizeMode = _
DataGridViewColumnHeadersHeightSizeMode.AutoSize
'行ヘッダーの幅が自動調整されるようにする
DataGridView1.RowHeadersWidthSizeMode = _
DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
[C#]
//列ヘッダーの高さが自動調整されるようにする
DataGridView1.ColumnHeadersHeightSizeMode =
DataGridViewColumnHeadersHeightSizeMode.AutoSize;
//行ヘッダーの幅が自動調整されるようにする
DataGridView1.RowHeadersWidthSizeMode =
DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
指定列自动调整
[VB.NET]
'はじめの列の幅を自動調整する
DataGridView1.Columns(0).AutoSizeMode = _
DataGridViewAutoSizeColumnMode.DisplayedCells
[C#]
//はじめの列の幅を自動調整する
DataGridView1.Columns[0].AutoSizeMode =
DataGridViewAutoSizeColumnMode.DisplayedCells;
(进口轴承 jack jones 火狐浏览器下载 杰克琼斯 )
9. DataGridView指定行列冻结
列冻结(当前列以及左侧做所有列)
[VB.NET]
'DataGridView1の左側2列を固定する
DataGridView1.Columns(1).Frozen = True
[C#]
//DataGridView1の左側2列を固定する
DataGridView1.Columns[1].Frozen = true;
行冻结(当前行以及上部所有行)
[VB.NET]
'DataGridView1の上部2行を固定する
DataGridView1.Rows(2).Frozen = True
[C#]
//DataGridView1の上部2行を固定する
DataGridView1.Rows[2].Frozen = true;
指定单元格冻结(单元格所在行上部分所有行,列左侧所有列)
[VB.NET]
DataGridView1(0, 0). Frozen = True
[C#]
DataGridView1[0, 0]. Frozen = true;

10. DataGridView列顺序变更可否设定
[VB.NET]
'DataGridView1の列の位置をユーザーが変更できるようにする
DataGridView1.AllowUserToOrderColumns = True
[C#]
//DataGridView1の列の位置をユーザーが変更できるようにする
DataGridView1.AllowUserToOrderColumns = true;
但是如果列冻结的情况下,冻结的部分不能变更到非冻结的部分。
变更后列位置取得
[VB.NET]
'列"Column1"の現在の位置を取得する
Console.WriteLine(DataGridView1.Columns("Column1").DisplayIndex)
'列"Column1"を先頭に移動する
DataGridView1.Columns("Column1").DisplayIndex = 0
[C#]
//列"Column1"の現在の位置を取得する
Console.WriteLine(DataGridView1.Columns["Column1"].DisplayIndex);
//列"Column1"を先頭に移動する
DataGridView1.Columns["Column1"].DisplayIndex = 0;

11. DataGridView行复数选择
复数行选择不可
[VB.NET]
'DataGridView1でセル、行、列が複数選択されないようにする
DataGridView1.MultiSelect = False
[C#]
//DataGridView1でセル、行、列が複数選択されないようにする
DataGridView1.MultiSelect = false;
单元格选择的时候默认为选择整行
[VB.NET]
'セルを選択すると行全体が選択されるようにする
DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
[C#]
//セルを選択すると行全体が選択されるようにする
DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

12. DataGridView选择的行、列、单元格取得
[VB.NET]
'選択されているセルを表示
Console.WriteLine("選択されているセル")
For Each c As DataGridViewCell In DataGridView1.SelectedCells
Console.WriteLine("{0}, {1}", c.ColumnIndex, c.RowIndex)
Next c
'選択されている行を表示
Console.WriteLine("選択されている行")
For Each r As DataGridViewRow In DataGridView1.SelectedRows
Console.WriteLine(r.Index)
Next r
'選択されている列を表示
Console.WriteLine("選択されている列")
For Each c As DataGridViewColumn In DataGridView1.SelectedColumns
Console.WriteLine(c.Index)
Next c
[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);
}
指定行、列、单元格取得
[VB.NET]
'(0, 0)のセルを選択する
DataGridView1(0, 0).Selected = True
'インデックス1の行を選択する
DataGridView1.Rows(1).Selected = True
'インデックス2の列を選択する
DataGridView1.Columns(2).Selected = True
[C#]
//(0, 0)のセルを選択する
DataGridView1[0, 0].Selected = true;
//インデックス1の行を選択する
DataGridView1.Rows[1].Selected = true;
//インデックス2の列を選択する
DataGridView1.Columns[2].Selected = true;
13. DataGridView指定单元格是否表示
[VB.NET]
If Not DataGridView1(0, 0).Displayed AndAlso _
DataGridView1(0, 0).Visible Then
DataGridView1.CurrentCell = DataGridView1(0, 0)
End If
[C#]
if (!DataGridView1[0, 0].Displayed && DataGridView1[0, 0].Visible)
{
DataGridView1.CurrentCell = DataGridView1[0, 0];
}

14. DataGridView表头部单元格取得
[VB.NET]
'DataGridView1のはじめの列のテキストを変更する
DataGridView1.Columns(0).HeaderCell.Value = "はじめの列"
'DataGridView1のはじめの行のテキストを変更する
DataGridView1.Rows(0).HeaderCell.Value = "はじめの行"
'DataGridView1の左上隅のセルのテキストを変更する
DataGridView1.TopLeftHeaderCell.Value = "左上"
[C#]
//DataGridView1のはじめの列のテキストを変更する
DataGridView1.Columns[0].HeaderCell.Value = "はじめの列";
//DataGridView1のはじめの行のテキストを変更する
DataGridView1.Rows[0].HeaderCell.Value = "はじめの行";
//DataGridView1の左上隅のセルのテキストを変更する
DataGridView1.TopLeftHeaderCell.Value = "左上";

15. DataGridView表头部单元格文字列设定
更改列Header表示文字列
[VB.NET]
'DataGridView1のはじめの列のテキストを変更する
DataGridView1.Columns(0).HeaderText = "はじめの列"
[C#]
//DataGridView1のはじめの列のテキストを変更する
DataGridView1.Columns[0].HeaderText = "はじめの列";
更改行Header表示文字列
[VB.NET]
'DataGridView1の行ヘッダーに行番号を表示する
Dim i As Integer
For i = 0 To DataGridView1.Rows.Count - 1
DataGridView1.Rows(i).HeaderCell.Value = i.ToString()
Next i
'行ヘッダーの幅を自動調節する
DataGridView1.AutoResizeRowHeadersWidth( _
DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
[C#]
//DataGridView1の行ヘッダーに行番号を表示する
for (int i = 0; i < DataGridView1.Rows.Count; i++)
{
DataGridView1.Rows[i].HeaderCell.Value = i.ToString();
}
//行ヘッダーの幅を自動調節する
DataGridView1.AutoResizeRowHeadersWidth(
DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
最左上Header单元格文字列
[VB.NET]
'左上隅のヘッダーセルに"/"と表示する
DataGridView1.TopLeftHeaderCell.Value = "/"
[C#]
//左上隅のヘッダーセルに"/"と表示する
DataGridView1.TopLeftHeaderCell.Value = "/";

16. DataGridView选择的部分拷贝至剪贴板
拷贝模式设定
[VB.NET]
'ヘッダーをコピーしないようにする
DataGridView1.ClipboardCopyMode = _
DataGridViewClipboardCopyMode.EnableWithoutHeaderText
[C#]
//ヘッダーをコピーしないようにする
DataGridView1.ClipboardCopyMode =
DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
选中部分拷贝
[VB.NET]
'選択されたセルをクリップボードにコピーする
Clipboard.SetDataObject(DataGridView1.GetClipboardContent())
[C#]
//選択されたセルをクリップボードにコピーする
Clipboard.SetDataObject(DataGridView1.GetClipboardContent());
(进口轴承 jack jones 火狐浏览器下载 杰克琼斯 )
17.DataGridView粘贴
[VB.NET]
'現在のセルのある行から下にペーストする
If DataGridView1.CurrentCell Is Nothing Then
Return
End If
Dim insertRowIndex As Integer = DataGridView1.CurrentCell.RowIndex

'クリップボードの内容を取得して、行で分ける
Dim pasteText As String = Clipboard.GetText()
If String.IsNullOrEmpty(pasteText) Then
Return
End If
pasteText = pasteText.Replace(vbCrLf, vbLf)
pasteText = pasteText.Replace(vbCr, vbLf)
pasteText.TrimEnd(New Char() {vbLf})
Dim lines As String() = pasteText.Split(vbLf)

Dim isHeader As Boolean = True
For Each line As String In lines
'列ヘッダーならば飛ばす
If isHeader Then
isHeader = False
Else
'タブで分割
Dim vals As String() = line.Split(ControlChars.Tab)
'列数が合っているか調べる
If vals.Length - 1 <> DataGridView1.ColumnCount Then
Throw New ApplicationException("列数が違います。")
End If
Dim row As DataGridViewRow = DataGridView1.Rows(insertRowIndex)
'ヘッダーを設定
row.HeaderCell.Value = vals(0)
'各セルの値を設定
Dim i As Integer
For i = 0 To row.Cells.Count - 1
row.Cells(i).Value = vals((i + 1))
Next i
'次の行へ
insertRowIndex += 1
End If
Next line
[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. DataGridView单元格上ToolTip表示设定(鼠标移动到相应单元格上时,弹出说明信息)
[VB.NET]
'セルに表示するToolTipを設定する
DataGridView1(0, 0).ToolTipText = "このセルは変更できません"
'列ヘッダーに表示するToolTipを設定する
DataGridView1.Columns(0).ToolTipText = "この列には数字を入力できます"
'行ヘッダーに表示するToolTipを設定する
DataGridView1.Rows(0).HeaderCell.ToolTipText = "この行のセルは変更できません"
[C#]
//セルに表示するToolTipを設定する
DataGridView1[0, 0].ToolTipText = "このセルは変更できません";
//列ヘッダーに表示するToolTipを設定する
DataGridView1.Columns[0].ToolTipText = "この列には数字を入力できます";
//行ヘッダーに表示するToolTipを設定する
DataGridView1.Rows[0].HeaderCell.ToolTipText = "この行のセルは変更できません";
CellToolTipTextNeeded事件,在多个单元格使用相同的ToolTips的时候,可以用该事件,下例为显示当前单元格的行号和列号
[VB.NET]
'CellToolTipTextNeededイベントハンドラ
Private Sub DataGridView1_CellToolTipTextNeeded(ByVal sender As Object, _
ByVal e As DataGridViewCellToolTipTextNeededEventArgs) _
Handles DataGridView1.CellToolTipTextNeeded
e.ToolTipText = e.ColumnIndex.ToString() + ", " + e.RowIndex.ToString()
End Sub
[C#]
//CellToolTipTextNeededイベントハンドラ
private void DataGridView1_CellToolTipTextNeeded(object sender,
DataGridViewCellToolTipTextNeededEventArgs e)
{
e.ToolTipText = e.ColumnIndex.ToString() + ", " + e.RowIndex.ToString();
}
19. DataGridView中的ContextMenuStrip属性
[VB.NET]
'DataGridViewのContextMenuStripを設定する
DataGridView1.ContextMenuStrip = Me.ContextMenuStrip1
'列のContextMenuStripを設定する
DataGridView1.Columns(0).ContextMenuStrip = Me.ContextMenuStrip2
'列ヘッダーのContextMenuStripを設定する
DataGridView1.Columns(0).HeaderCell.ContextMenuStrip = Me.ContextMenuStrip2
'行のContextMenuStripを設定する
DataGridView1.Rows(0).ContextMenuStrip = Me.ContextMenuStrip3
'セルのContextMenuStripを設定する
DataGridView1(1, 0).ContextMenuStrip = Me.ContextMenuStrip4
[C#]
//DataGridViewのContextMenuStripを設定する
DataGridView1.ContextMenuStrip = this.ContextMenuStrip1;
//列のContextMenuStripを設定する
DataGridView1.Columns[0].ContextMenuStrip = this.ContextMenuStrip2;
//列ヘッダーのContextMenuStripを設定する
DataGridView1.Columns[0].HeaderCell.ContextMenuStrip = this.ContextMenuStrip2;
//行のContextMenuStripを設定する
DataGridView1.Rows[0].ContextMenuStrip = this.ContextMenuStrip3;
//セルのContextMenuStripを設定する
DataGridView1[0, 1].ContextMenuStrip = this.ContextMenuStrip4;
也可以用CellContextMenuStripNeeded、RowContextMenuStripNeeded属性进行定义
[VB.NET]
'CellContextMenuStripNeededイベントハンドラ
Private Sub DataGridView1_CellContextMenuStripNeeded( _
ByVal sender As Object, _
ByVal e As DataGridViewCellContextMenuStripNeededEventArgs) _
Handles DataGridView1.CellContextMenuStripNeeded
Dim dgv As DataGridView = CType(sender, DataGridView)
If e.RowIndex < 0 Then
'列ヘッダーに表示するContextMenuStripを設定する
e.ContextMenuStrip = Me.ContextMenuStrip1
ElseIf e.ColumnIndex < 0 Then
'行ヘッダーに表示するContextMenuStripを設定する
e.ContextMenuStrip = Me.ContextMenuStrip2
ElseIf TypeOf (dgv(e.ColumnIndex, e.RowIndex).Value) Is Integer Then
'セルが整数型のときに表示するContextMenuStripを変更する
e.ContextMenuStrip = Me.ContextMenuStrip3
End If
End Sub
[C#]
//CellContextMenuStripNeededイベントハンドラ
private void DataGridView1_CellContextMenuStripNeeded(object sender,
DataGridViewCellContextMenuStripNeededEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
if (e.RowIndex < 0)
{
//列ヘッダーに表示するContextMenuStripを設定する
e.ContextMenuStrip = this.ContextMenuStrip1;
}
else if (e.ColumnIndex < 0)
{
//行ヘッダーに表示するContextMenuStripを設定する
e.ContextMenuStrip = this.ContextMenuStrip2;
}
else if (dgv[e.ColumnIndex, e.RowIndex].Value is int)
{
//セルが整数型のときに表示するContextMenuStripを変更する
e.ContextMenuStrip = this.ContextMenuStrip3;
}
}

20.指定DataGridView的滚动框位置
[VB.NET]
'先頭の行までスクロールする
DataGridView1.FirstDisplayedScrollingRowIndex = 0
'先頭の列までスクロールする
DataGridView1.FirstDisplayedScrollingColumnIndex = 0
[C#]
//先頭の行までスクロールする
DataGridView1.FirstDisplayedScrollingRowIndex = 0;
//先頭の列までスクロールする
DataGridView1.FirstDisplayedScrollingColumnIndex = 0;

21. DataGridView手动追加列
[VB.NET]
'列が自動的に作成されないようにする
DataGridView1.AutoGenerateColumns = False
'データソースを設定する
DataGridView1.DataSource = BindingSource1

'DataGridViewTextBoxColumn列を作成する
Dim textColumn As New DataGridViewTextBoxColumn()
'データソースの"Column1"をバインドする
textColumn.DataPropertyName = "Column1"
'名前とヘッダーを設定する
textColumn.Name = "Column1"
textColumn.HeaderText = "Column1"
'列を追加する
DataGridView1.Columns.Add(textColumn)
[C#]
//列が自動的に作成されないようにする
DataGridView1.AutoGenerateColumns = false;
//データソースを設定する
DataGridView1.DataSource = BindingSource1;

//DataGridViewTextBoxColumn列を作成する
DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn();
//データソースの"Column1"をバインドする
textColumn.DataPropertyName = "Column1";
//名前とヘッダーを設定する
textColumn.Name = "Column1";
textColumn.HeaderText = "Column1";
//列を追加する
DataGridView1.Columns.Add(textColumn);

22. DataGridView全体分界线样式设置
[VB.NET]
'DataGridViewの境界線を3Dにする
DataGridView1.BorderStyle = BorderStyle.Fixed3D
[C#]
//DataGridViewの境界線を3Dにする
DataGridView1.BorderStyle = BorderStyle.Fixed3D;
单元格上下左右分界线样式设置
[VB.NET]
'セルの上と左を二重線のくぼんだ境界線にし、
'下と右を一重線のくぼんだ境界線にする
DataGridView1.AdvancedCellBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.InsetDouble
DataGridView1.AdvancedCellBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.Inset
DataGridView1.AdvancedCellBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.Inset
DataGridView1.AdvancedCellBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.InsetDouble
[C#]
//セルの上と左を二重線のくぼんだ境界線にし、
//下と右を一重線のくぼんだ境界線にする
DataGridView1.AdvancedCellBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.InsetDouble;
DataGridView1.AdvancedCellBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.Inset;
DataGridView1.AdvancedCellBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.Inset;
DataGridView1.AdvancedCellBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.InsetDouble;

23.根据DataGridView单元格属性更改显示内容
如下例,当该列是字符串时,自动转换文字大小写
[VB.NET]
'CellFormattingイベントハンドラ
Private Sub DataGridView1_CellFormatting(ByVal sender As Object, _
ByVal e As DataGridViewCellFormattingEventArgs) _
Handles DataGridView1.CellFormatting
Dim dgv As DataGridView = CType(sender, DataGridView)

'セルの列を確認
If dgv.Columns(e.ColumnIndex).Name = "Column1" AndAlso _
TypeOf e.Value Is String Then
'大文字にして表示する
Dim str As String = e.Value.ToString()
e.Value = str.ToUpper()
'フォーマットの必要がないことを知らせる
e.FormattingApplied = True
End If
End Sub
[C#]
//CellFormattingイベントハンドラ
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. DataGridView新追加行的行高样式设置
行高设置
[VB.NET]
'行テンプレートの高さを設定する
DataGridView1.RowTemplate.Height = 50

'行の最低の高さを設定する
DataGridView1.RowTemplate.MinimumHeight = 50
[C#]
//行テンプレートの高さを設定する
DataGridView1.RowTemplate.Height = 50;

//行の最低の高さを設定する
DataGridView1.RowTemplate.MinimumHeight = 50;
样式设置
[VB.NET]
'行テンプレートのセルスタイルの背景色を黄色にする
DataGridView1.DefaultCellStyle.BackColor = Color.Yellow
[C#]
//行テンプレートのセルスタイルの背景色を黄色にする
DataGridView1.DefaultCellStyle.BackColor = Color.Yellow;

25. DataGridView新追加行单元格默认值设置
[VB.NET]
'DefaultValuesNeededイベントハンドラ
Private Sub DataGridView1_DefaultValuesNeeded(ByVal sender As Object, _
ByVal e As DataGridViewRowEventArgs) _
Handles DataGridView1.DefaultValuesNeeded
'セルの既定値を指定する
e.Row.Cells("Column1").Value = 0
e.Row.Cells("Column2").Value = "-"
End Sub
[C#]
//DefaultValuesNeededイベントハンドラ
private void DataGridView1_DefaultValuesNeeded(object sender,
DataGridViewRowEventArgs e)
{
//セルの既定値を指定する
e.Row.Cells["Column1"].Value = 0;
e.Row.Cells["Column2"].Value = "-";
}

26. DataGridView单元格数据错误标签表示
<!--[if !vml]--><!--[endif]-->
[VB.NET]
'(0, 0)のセルにエラーアイコンを表示する
DataGridView1(0, 0).ErrorText = "セルの値を確認してください。"

'インデックスが3の行にエラーアイコンを表示する
DataGridView1.Rows(3).ErrorText = "負の値は入力できません。"
[C#]
//(0, 0)のセルにエラーアイコンを表示する
DataGridView1[0, 0].ErrorText = "セルの値を確認してください。";

//インデックスが3の行にエラーアイコンを表示する
DataGridView1.Rows[3].ErrorText = "負の値は入力できません。";

在大量单元格需要错误提示时,也可以用CellErrorTextNeeded、RowErrorTextNeeded事件
[VB.NET]
'CellErrorTextNeededイベントハンドラ
Private Sub DataGridView1_CellErrorTextNeeded(ByVal sender As Object, _
ByVal e As DataGridViewCellErrorTextNeededEventArgs) _
Handles DataGridView1.CellErrorTextNeeded
Dim dgv As DataGridView = CType(sender, DataGridView)
'セルの値が負の整数であれば、エラーアイコンを表示する
Dim cellVal As Object = dgv(e.ColumnIndex, e.RowIndex).Value
If TypeOf cellVal Is Integer AndAlso CInt(cellVal) < 0 Then
e.ErrorText = "負の整数は入力できません。"
End If
End Sub

'RowErrorTextNeededイベントハンドラ
Private Sub DataGridView1_RowErrorTextNeeded(ByVal sender As Object, _
ByVal e As DataGridViewRowErrorTextNeededEventArgs) _
Handles DataGridView1.RowErrorTextNeeded
Dim dgv As DataGridView = CType(sender, DataGridView)
If dgv("Column1", e.RowIndex).Value Is DBNull.Value AndAlso _
dgv("Column2", e.RowIndex).Value Is DBNull.Value Then
e.ErrorText = _
"少なくともColumn1とColumn2のどちらかには値を入力してください。"
End If
End Sub
[C#]
//CellErrorTextNeededイベントハンドラ
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 = "負の整数は入力できません。";
}
}

//RowErrorTextNeededイベントハンドラ
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 =
"少なくともColumn1とColumn2のどちらかには値を入力してください。";
}
}

27. DataGridView单元格内输入值正确性判断
[VB.NET]
'CellValidatingイベントハンドラ
Private Sub DataGridView1_CellValidating(ByVal sender As Object, _
ByVal e As DataGridViewCellValidatingEventArgs) _
Handles DataGridView1.CellValidating
Dim dgv As DataGridView = CType(sender, DataGridView)

If dgv.Columns(e.ColumnIndex).Name = "Column1" AndAlso _
e.FormattedValue.ToString() = "" Then
'行にエラーテキストを設定
dgv.Rows(e.RowIndex).ErrorText = "値が入力されていません。"
'入力した値をキャンセルして元に戻すには、次のようにする
'dgv.CancelEdit()
'キャンセルする
e.Cancel = True
End If
End Sub

'CellValidatedイベントハンドラ
Private Sub DataGridView1_CellValidated(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs) _
Handles DataGridView1.CellValidated
Dim dgv As DataGridView = CType(sender, DataGridView)
'エラーテキストを消す
dgv.Rows(e.RowIndex).ErrorText = Nothing
End Sub
[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;
}
}

//CellValidatedイベントハンドラ
private void DataGridView1_CellValidated(object sender,
DataGridViewCellEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
//エラーテキストを消す
dgv.Rows[e.RowIndex].ErrorText = null;
}

28. DataGridView单元格输入错误值事件的捕获
[VB.NET]
'DataErrorイベントハンドラ
Private Sub DataGridView1_DataError(ByVal sender As Object, _
ByVal e As DataGridViewDataErrorEventArgs) _
Handles DataGridView1.DataError
If Not (e.Exception Is Nothing) Then
MessageBox.Show(Me, _
String.Format("({0}, {1}) のセルでエラーが発生しました。" + _
vbCrLf + vbCrLf + "説明: {2}", _
e.ColumnIndex, e.RowIndex, e.Exception.Message), _
"エラーが発生しました", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
End If
End Sub
[C#]
//DataErrorイベントハンドラ
private void DataGridView1_DataError(object sender,
DataGridViewDataErrorEventArgs e)
{
if (e.Exception != null)
{
MessageBox.Show(this,
string.Format("({0}, {1}) のセルでエラーが発生しました。/n/n説明: {2}",
e.ColumnIndex, e.RowIndex, e.Exception.Message),
"エラーが発生しました",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
输入错误值时返回原先数据
[VB.NET]
'DataErrorイベントハンドラ
Private Sub DataGridView1_DataError(ByVal sender As Object, _
ByVal e As DataGridViewDataErrorEventArgs) _
Handles DataGridView1.DataError
e.Cancel = False
End Sub
[C#]
//DataErrorイベントハンドラ
private void DataGridView1_DataError(object sender,
DataGridViewDataErrorEventArgs e)
{
e.Cancel = false;
}
29. DataGridView行排序(点击列表头自动排序的设置)
[VB.NET]
'並び替えができないようにする
For Each c As DataGridViewColumn In DataGridView1.Columns
c.SortMode = DataGridViewColumnSortMode.NotSortable
Next c
[C#]
//並び替えができないようにする
foreach (DataGridViewColumn c in DataGridView1.Columns)
c.SortMode = DataGridViewColumnSortMode.NotSortable;

30. DataGridView自动行排序(新追加值也会自动排序)
[VB.NET]
'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'自動的に並び替えられるようにする
Dim c As DataGridViewColumn
For Each c In DataGridView1.Columns
c.SortMode = DataGridViewColumnSortMode.Automatic
Next c
End Sub

'Button1のClickイベントハンドラ
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
If DataGridView1.CurrentCell Is Nothing Then
Return
End If

'並び替える列を決める
Dim sortColumn As DataGridViewColumn = _
DataGridView1.CurrentCell.OwningColumn

'並び替えの方向(昇順か降順か)を決める
Dim sortDirection As System.ComponentModel.ListSortDirection = _
System.ComponentModel.ListSortDirection.Ascending
If Not (DataGridView1.SortedColumn Is Nothing) AndAlso _
DataGridView1.SortedColumn.Equals(sortColumn) Then
sortDirection = IIf(DataGridView1.SortOrder = SortOrder.Ascending, _
System.ComponentModel.ListSortDirection.Descending, _
System.ComponentModel.ListSortDirection.Ascending)
End If

'並び替えを行う
DataGridView1.Sort(sortColumn, sortDirection)
End Sub
[C#]
//フォームのLoadイベントハンドラ
private void Form1_Load(object sender, EventArgs e)
{
//自動的に並び替えられるようにする
foreach (DataGridViewColumn c in DataGridView1.Columns)
c.SortMode = DataGridViewColumnSortMode.Automatic;
}

//Button1のClickイベントハンドラ
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. DataGridView自动行排序禁止情况下的排序
'ColumnHeaderMouseClickイベントハンドラ
Private Sub DataGridView1_ColumnHeaderMouseClick(ByVal sender As Object, _
ByVal e As DataGridViewCellMouseEventArgs) _
Handles DataGridView1.ColumnHeaderMouseClick
Dim clickedColumn As DataGridViewColumn = _
DataGridView1.Columns(e.ColumnIndex)
If clickedColumn.SortMode <> DataGridViewColumnSortMode.Automatic Then
Me.SortRows(clickedColumn, True)
End If
End Sub

'RowsAddedイベントハンドラ
Private Sub DataGridView1_RowsAdded(ByVal sender As Object, _
ByVal e As DataGridViewRowsAddedEventArgs) _
Handles DataGridView1.RowsAdded
Me.SortRows(DataGridView1.SortedColumn, False)
End Sub

'CellValueChangedイベントハンドラ
Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs) _
Handles DataGridView1.CellValueChanged
If Not (DataGridView1.SortedColumn Is Nothing) AndAlso _
e.ColumnIndex = DataGridView1.SortedColumn.Index Then
Me.SortRows(DataGridView1.SortedColumn, False)
End If
End Sub

''' <summary>
''' 指定された列を基準にして並び替えを行う
''' </summary>
''' <param name="sortColumn">基準にする列</param>
''' <param name="orderToggle">並び替えの方向をトグルで変更する</param>
Private Sub SortRows(ByVal sortColumn As DataGridViewColumn, _
ByVal orderToggle As Boolean)
If sortColumn Is Nothing Then
Return
End If

'今までの並び替えグリフを消す
If sortColumn.SortMode = DataGridViewColumnSortMode.Programmatic AndAlso _
Not (DataGridView1.SortedColumn Is Nothing) AndAlso _
Not DataGridView1.SortedColumn.Equals(sortColumn) Then
DataGridView1.SortedColumn.HeaderCell.SortGlyphDirection = _
SortOrder.None
End If

'並び替えの方向(昇順か降順か)を決める
Dim sortDirection As System.ComponentModel.ListSortDirection
If orderToggle Then
sortDirection = IIf(DataGridView1.SortOrder = SortOrder.Descending, _
System.ComponentModel.ListSortDirection.Ascending, _
System.ComponentModel.ListSortDirection.Descending)
Else
sortDirection = IIf(DataGridView1.SortOrder = SortOrder.Descending, _
System.ComponentModel.ListSortDirection.Descending, _
System.ComponentModel.ListSortDirection.Ascending)
End If
Dim sOrder As SortOrder = _
IIf(sortDirection = System.ComponentModel.ListSortDirection.Ascending, _
SortOrder.Ascending, SortOrder.Descending)

'並び替えを行う
DataGridView1.Sort(sortColumn, sortDirection)

If sortColumn.SortMode = DataGridViewColumnSortMode.Programmatic Then
'並び替えグリフを変更
sortColumn.HeaderCell.SortGlyphDirection = sOrder
End If
End Sub
[C#]
//フォームのLoadイベントハンドラ
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);
}

//ColumnHeaderMouseClickイベントハンドラ
private void DataGridView1_ColumnHeaderMouseClick(object sender,
DataGridViewCellMouseEventArgs e)
{
DataGridViewColumn clickedColumn = DataGridView1.Columns[e.ColumnIndex];
if (clickedColumn.SortMode != DataGridViewColumnSortMode.Automatic)
this.SortRows(clickedColumn, true);
}

//RowsAddedイベントハンドラ
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. DataGridView指定列指定排序
[VB.NET]
'DataGridView1にバインドされているDataTableを取得
Dim dt As DataTable = CType(DataGridView1.DataSource, DataTable)
'DataViewを取得
Dim dv As DataView = dt.DefaultView
'Column1とColumn2で昇順に並び替える
dv.Sort = "Column1, Column2 ASC"

'2つの列のヘッダーに並び替えグリフを表示する
DataGridView1.Columns("Column1").HeaderCell.SortGlyphDirection = _
SortOrder.Ascending
DataGridView1.Columns("Column2").HeaderCell.SortGlyphDirection = _
SortOrder.Ascending
[C#]
//DataGridView1にバインドされているDataTableを取得
DataTable dt = (DataTable)DataGridView1.DataSource;
//DataViewを取得
DataView dv = dt.DefaultView;
//Column1とColumn2で昇順に並び替える
dv.Sort = "Column1, Column2 ASC";

//2つの列のヘッダーに並び替えグリフを表示する
DataGridView1.Columns["Column1"].HeaderCell.SortGlyphDirection =
SortOrder.Ascending;
DataGridView1.Columns["Column2"].HeaderCell.SortGlyphDirection =
SortOrder.Ascending;

33. DataGridView单元格样式设置
指定行列的样式设定
[VB.NET]
'インデックス0の列のセルの背景色を水色にする
DataGridView1.Columns(0).DefaultCellStyle.BackColor = Color.Aqua
'インデックス0の行のセルの背景色を薄い灰色にする
DataGridView1.Rows(0).DefaultCellStyle.BackColor = Color.LightGray
[C#]
//インデックス0の列のセルの背景色を水色にする
DataGridView1.Columns[0].DefaultCellStyle.BackColor = Color.Aqua;
//インデックス0の行のセルの背景色を薄い灰色にする
DataGridView1.Rows[0].DefaultCellStyle.BackColor = Color.LightGray;
奇数行样式设定
[VB.NET]
'奇数行のセルの背景色を黄緑色にする
DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.GreenYellow
[C#]
//奇数行のセルの背景色を黄緑色にする
DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.GreenYellow;
行,列表头部的样式设定
[VB.NET]
'列ヘッダーの背景色をアイボリーにする
DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Ivory

'行ヘッダーの背景色をライムにする
DataGridView1.RowHeadersDefaultCellStyle.BackColor = Color.Lime
[C#]
//列ヘッダーの背景色をアイボリーにする
DataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Ivory;

//行ヘッダーの背景色をライムにする
DataGridView1.RowHeadersDefaultCellStyle.BackColor = Color.Lime;
样式的优先顺序
一般单元格的样式优先顺位
DataGridViewCell.Style
DataGridViewRow.DefaultCellStyle
DataGridView.AlternatingRowsDefaultCellStyle
DataGridView.RowsDefaultCellStyle
DataGridViewColumn.DefaultCellStyle
DataGridView.DefaultCellStyle
表头部的样式优先顺位
DataGridViewCell.Style
DataGridView.RowHeadersDefaultCellStyle
DataGridView.ColumnHeadersDefaultCellStyle
DataGridView.DefaultCellStyle
下例说明
[VB.NET]
'1列目を水色にする
DataGridView1.Columns(0).DefaultCellStyle.BackColor = Color.Aqua
'全ての列の背景色を黄色にする
DataGridView1.RowsDefaultCellStyle.BackColor = Color.Yellow
'奇数行を黄緑色にする
DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.GreenYellow
'3行目をピンクにする
DataGridView1.Rows(2).DefaultCellStyle.BackColor = Color.Pink

'自身のセルスタイルと継承されたセルスタイルの背景色を取得する
'1列目のセルスタイル
'"[Aqua]"と"[Aqua]"と表示される
Console.WriteLine(DataGridView1.Columns(0).DefaultCellStyle.BackColor)
Console.WriteLine(DataGridView1.Columns(0).InheritedStyle.BackColor)

'1行目のセルスタイル
'"[Empty]"と"[Yellow]"と表示される
Console.WriteLine(DataGridView1.Rows(0).DefaultCellStyle.BackColor)
Console.WriteLine(DataGridView1.Rows(0).InheritedStyle.BackColor)

'2行目のセルスタイル
'"[Empty]"と"[GreenYellow]"と表示される
Console.WriteLine(DataGridView1.Rows(1).DefaultCellStyle.BackColor)
Console.WriteLine(DataGridView1.Rows(1).InheritedStyle.BackColor)

'3行目のセルスタイル
'"[Pink]"と"[Pink]"と表示される
Console.WriteLine(DataGridView1.Rows(2).DefaultCellStyle.BackColor)
Console.WriteLine(DataGridView1.Rows(2).InheritedStyle.BackColor)

'(0, 3)のセルスタイル
'"[Empty]"と"[Pink]"と表示される
Console.WriteLine(DataGridView1(0, 2).Style.BackColor)
Console.WriteLine(DataGridView1(0, 2).InheritedStyle.BackColor)
[C#]
//1列目を水色にする
DataGridView1.Columns[0].DefaultCellStyle.BackColor = Color.Aqua;
//全ての列の背景色を黄色にする
DataGridView1.RowsDefaultCellStyle.BackColor = Color.Yellow;
//奇数行を黄緑色にする
DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.GreenYellow;
//3行目をピンクにする
DataGridView1.Rows[2].DefaultCellStyle.BackColor = Color.Pink;

//自身のセルスタイルと継承されたセルスタイルの背景色を取得する

//1列目のセルスタイル
//"[Aqua]"と"[Aqua]"と表示される
Console.WriteLine(DataGridView1.Columns[0].DefaultCellStyle.BackColor);
Console.WriteLine(DataGridView1.Columns[0].InheritedStyle.BackColor);

//1行目のセルスタイル
//"[Empty]"と"[Yellow]"と表示される
Console.WriteLine(DataGridView1.Rows[0].DefaultCellStyle.BackColor);
Console.WriteLine(DataGridView1.Rows[0].InheritedStyle.BackColor);

//2行目のセルスタイル
//"[Empty]"と"[GreenYellow]"と表示される
Console.WriteLine(DataGridView1.Rows[1].DefaultCellStyle.BackColor);
Console.WriteLine(DataGridView1.Rows[1].InheritedStyle.BackColor);

//3行目のセルスタイル
//"[Pink]"と"[Pink]"と表示される
Console.WriteLine(DataGridView1.Rows[2].DefaultCellStyle.BackColor);
Console.WriteLine(DataGridView1.Rows[2].InheritedStyle.BackColor);

//(0, 3)のセルスタイル
//"[Empty]"と"[Pink]"と表示される
Console.WriteLine(DataGridView1[0, 2].Style.BackColor);
Console.WriteLine(DataGridView1[0, 2].InheritedStyle.BackColor);
<!--[if !vml]--><!--[endif]-->
复数行列的样式设定
[VB.NET]
'奇数列の背景色を変更する
'効率的な方法
Dim cellStyle As New DataGridViewCellStyle()
cellStyle.BackColor = Color.Yellow
For i As Integer = 0 To DataGridView1.Columns.Count - 1
If i Mod 2 = 0 Then
DataGridView1.Columns(i).DefaultCellStyle = cellStyle
End If
Next i

'非効率的な方法
For i As Integer = 0 To DataGridView1.Columns.Count - 1
If i Mod 2 = 0 Then
DataGridView1.Columns(i).DefaultCellStyle.BackColor = Color.Yellow
End If
Next i
[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;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值