DataGridView控件用法合集(一)
近期将DataGridView常用的一些用法做了一个整理。为防止页面过长,现分批贴出来,此为第一部分。
1. DataGridView当前的单元格属性取得、变更
2. DataGridView编辑属性
3. DataGridView最下面一列新追加行非表示
4. DataGridView判断当前选中行是否为新追加的行
5. DataGridView删除行可否设定
6. 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);
}
}
DataGridView控件用法合集(二)
近期将DataGridView常用的一些用法做了一个整理。为防止页面过长,现分批贴出来,此为第二部分。
7. DataGridView行列宽度高度设置为不能编辑
8. DataGridView行高列幅自动调整
9. DataGridView指定行列冻结
10. DataGridView列顺序变更可否设定
11. DataGridView行复数选择
12. DataGridView选择的行、列、单元格取得
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;
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;
DataGridView控件用法合集(三)
近期将DataGridView常用的一些用法做了一个整理。为防止页面过长,现分批贴出来,此为第三部分。
13. DataGridView指定单元格是否表示
14. DataGridView表头部单元格取得
15. DataGridView表头部单元格文字列设定
16. DataGridView选择的部分拷贝至剪贴板
17.DataGridView粘贴
18. DataGridView单元格上ToolTip表示设定(鼠标移动到相应单元格上时,弹出说明信息)
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());
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();
}
近期将DataGridView常用的一些用法做了一个整理。为防止页面过长,现分批贴出来,此为第一部分。
1. DataGridView当前的单元格属性取得、变更
2. DataGridView编辑属性
3. DataGridView最下面一列新追加行非表示
4. DataGridView判断当前选中行是否为新追加的行
5. DataGridView删除行可否设定
6. 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);
}
}
DataGridView控件用法合集(二)
近期将DataGridView常用的一些用法做了一个整理。为防止页面过长,现分批贴出来,此为第二部分。
7. DataGridView行列宽度高度设置为不能编辑
8. DataGridView行高列幅自动调整
9. DataGridView指定行列冻结
10. DataGridView列顺序变更可否设定
11. DataGridView行复数选择
12. DataGridView选择的行、列、单元格取得
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;
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;
DataGridView控件用法合集(三)
近期将DataGridView常用的一些用法做了一个整理。为防止页面过长,现分批贴出来,此为第三部分。
13. DataGridView指定单元格是否表示
14. DataGridView表头部单元格取得
15. DataGridView表头部单元格文字列设定
16. DataGridView选择的部分拷贝至剪贴板
17.DataGridView粘贴
18. DataGridView单元格上ToolTip表示设定(鼠标移动到相应单元格上时,弹出说明信息)
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());
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();
}