■■■

2016年3月31日木曜日

DataView.Sortプロパティを設定してソートする方法

DataView.Sortプロパティを設定してソートする方法
VB.NET
Dim dt As DataTable = CType(dgv1.DataSource, DataTable)
Dim dv As DataView = dt.DefaultView
dv.Sort = "col1, col2 ASC"

dgv1.Columns("
col1").HeaderCell.SortGlyphDirection = _
SortOrder.Ascending
dgv1.Columns("
col2").HeaderCell.SortGlyphDirection = _
SortOrder.Ascending
C#
DataTable dt = (DataTable)dgv1.DataSource;
DataView dv = dt.DefaultView;
dv.Sort = "
col1, col2 ASC";

dgv1.Columns["
col1"].HeaderCell.SortGlyphDirection =
SortOrder.Ascending;
dgv1.Columns["
col2"].HeaderCell.SortGlyphDirection =
SortOrder.Ascending;






SortCompareを利用してDataGridViewをソートする方法

SortCompareを利用してDataGridViewをソートする方法
VB.NET
Private Sub dgv1_SortCompare(ByVal sender As Object, _
ByVal e As DataGridViewSortCompareEventArgs) _
Handles dgv1.SortCompare
Dim strTxt1 As String
If
e.CellValue1 Is Nothing Then
strTxt1 = ""
Else
strTxt1 = e.CellValue1.ToString
End If
Dim
strTxt2 As String
If
e.CellValue2 Is Nothing Then
strTxt2 = ""
Else
strTxt2 = e.CellValue2.ToString
End If

e.SortResult =
strTxt1.Length - strTxt2.Length
e.Handled = True
End Sub
C#
private void dgv1_SortCompare(object sender,
DataGridViewSortCompareEventArgs e)
{
string
strTxt1 = (e.CellValue1 == null ? "" : e.CellValue1.ToString());
string strTxt2 = (e.CellValue2 == null ? "" : e.CellValue2.ToString());

e.SortResult =
strTxt1.Length - strTxt2.Length;
e.Handled = true;
}



DataGridView.Sortで並び替える方法

DataGridView.Sortで並び替える方法
VB.NET
Public Class CustomComparer
Implements IComparer
Private sOrder As Integer
Private
comparer As Comparer

Public Sub New(ByVal order As SortOrder)
Me.sOrder = IIf(order = SortOrder.Descending, -1, 1)
Me.comparer = New Comparer( _
System.Globalization.CultureInfo.CurrentCulture)
End Sub

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements System.Collections.IComparer.Compare
Dim result As Integer = 0

Dim rowx As DataGridViewRow = CType(x, DataGridViewRow)
Dim rowy As DataGridViewRow = CType(y, DataGridViewRow)

For i As Integer = 0 To rowx.Cells.Count - 1
result = Me.comparer.Compare( _
rowx.Cells(i).Value, rowy.Cells(i).Value)
If result <> 0 Then
Exit For
End If
Next
i

Return result * Me.sOrder
End Function
End Class
dgv1.Sort(New CustomComparer(SortOrder.Ascending))
C#
public class CustomComparer : IComparer
{
private int sortOrder;
private Comparer comparer;

public CustomComparer(SortOrder order)
{
this.sortOrder = (order == SortOrder.Descending ? -1 : 1);
this.comparer = new Comparer(
System.Globalization.CultureInfo.CurrentCulture);
}

public int Compare(object x, object y)
{
int result = 0;

DataGridViewRow rowx = (DataGridViewRow)x;
DataGridViewRow rowy = (DataGridViewRow)y;

for (int i = 0; i < rowx.Cells.Count; i++)
{
result = this.comparer.Compare(
rowx.Cells[i].Value, rowy.Cells[i].Value);
if (result != 0)
break;
}

return result * this.sortOrder;
}
}
dgv1.Sort(new CustomComparer(SortOrder.Ascending));








DataGridViewで自動ソートされるようにする方法

DataGridViewで自動ソートされるようにする方法
VB.NET
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 dgv1.Columns
c.SortMode = DataGridViewColumnSortMode.Automatic
Next c
End Sub

Private Sub btn1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btn1.Click
If dgv1.CurrentCell Is Nothing Then
Return
End If


Dim sortColumn As DataGridViewColumn = _
dgv1.CurrentCell.OwningColumn

Dim sortDirection As System.ComponentModel.ListSortDirection = _
System.ComponentModel.ListSortDirection.Ascending
If Not (dgv1.SortedColumn Is Nothing) AndAlso _
dgv1.SortedColumn.Equals(sortColumn) Then
sortDirection = IIf(dgv1.SortOrder = SortOrder.Ascending, _
System.ComponentModel.ListSortDirection.Descending, _
System.ComponentModel.ListSortDirection.Ascending)
End If

dgv1.Sort(sortColumn, sortDirection)
End Sub
C#
private void Form1_Load(object sender, EventArgs e)
{
foreach (DataGridViewColumn c in dgv1.Columns)
c.SortMode = DataGridViewColumnSortMode.Automatic;
}

private void btn1_Click(object sender, EventArgs e)
{
if (dgv1.CurrentCell == null)
return;

DataGridViewColumn sortColumn = dgv1.CurrentCell.OwningColumn;

ListSortDirection sortDirection = ListSortDirection.Ascending;
if (dgv1.SortedColumn != null &&
dgv1.SortedColumn.Equals(sortColumn))
{
sortDirection =
dgv1.SortOrder == SortOrder.Ascending ?
ListSortDirection.Descending : ListSortDirection.Ascending;
}

dgv1.Sort(sortColumn, sortDirection);
}
強制的にDataGridViewをソートさせる方法
VB.NET
Private Sub dgv1_ColumnHeaderMouseClick(ByVal sender As Object, _
ByVal e As DataGridViewCellMouseEventArgs) _
Handles dgv1.ColumnHeaderMouseClick
Dim clickedColumn As DataGridViewColumn = _
dgv1.Columns(e.ColumnIndex)
If clickedColumn.SortMode <> DataGridViewColumnSortMode.Automatic Then
Me
.SortRows(clickedColumn, True)
End If
End Sub


Private Sub dgv1_RowsAdded(ByVal sender As Object, _
ByVal e As DataGridViewRowsAddedEventArgs) _
Handles dgv1.RowsAdded
Me.SortRows(dgv1.SortedColumn, False)
End Sub

Private Sub dgv1_CellValueChanged(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs) _
Handles dgv1.CellValueChanged
If Not (dgv1.SortedColumn Is Nothing) AndAlso _
e.ColumnIndex = dgv1.SortedColumn.Index Then
Me
.SortRows(dgv1.SortedColumn, False)
End If
End Sub


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 (dgv1.SortedColumn Is Nothing) AndAlso _
Not dgv1.SortedColumn.Equals(sortColumn) Then
dgv1.SortedColumn.HeaderCell.SortGlyphDirection = _
SortOrder.None
End If

Dim sortDirection As System.ComponentModel.ListSortDirection
If orderToggle Then
sortDirection = IIf(dgv1.SortOrder = SortOrder.Descending, _
System.ComponentModel.ListSortDirection.Ascending, _
System.ComponentModel.ListSortDirection.Descending)
Else
sortDirection = IIf(dgv1.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)

dgv1.Sort(sortColumn, sortDirection)

If sortColumn.SortMode = DataGridViewColumnSortMode.Programmatic Then
sortColumn.HeaderCell.SortGlyphDirection = sOrder
End If
End Sub
C#
private void Form1_Load(object sender, EventArgs e)
{
dgv1.RowsAdded += new DataGridViewRowsAddedEventHandler(
dgv1_RowsAdded);
dgv1.CellValueChanged += new DataGridViewCellEventHandler(
dgv1_CellValueChanged);
dgv1.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(
dgv1_ColumnHeaderMouseClick);
}

private void dgv1_ColumnHeaderMouseClick(object sender,
DataGridViewCellMouseEventArgs e)
{
DataGridViewColumn clickedColumn = dgv1.Columns[e.ColumnIndex];
if (clickedColumn.SortMode != DataGridViewColumnSortMode.Automatic)
this.SortRows(clickedColumn, true);
}

private void dgv1_RowsAdded(object sender,
DataGridViewRowsAddedEventArgs e)
{
this.SortRows(dgv1.SortedColumn, false);
}

private void dgv1_CellValueChanged(object sender,
DataGridViewCellEventArgs e)
{
if (dgv1.SortedColumn != null &&
e.ColumnIndex == dgv1.SortedColumn.Index)
this.SortRows(dgv1.SortedColumn, false);
}

private void SortRows(DataGridViewColumn sortColumn, bool orderToggle)
{
if (sortColumn == null)
return;

if (sortColumn.SortMode == DataGridViewColumnSortMode.Programmatic &&
dgv1.SortedColumn != null &&
!dgv1.SortedColumn.Equals(sortColumn))
{
dgv1.SortedColumn.HeaderCell.SortGlyphDirection =
SortOrder.None;
}

ListSortDirection sortDirection;
if (orderToggle)
{
sortDirection =
dgv1.SortOrder == SortOrder.Descending ?
ListSortDirection.Ascending : ListSortDirection.Descending;
}
else
{
sortDirection =
dgv1.SortOrder == SortOrder.Descending ?
ListSortDirection.Descending : ListSortDirection.Ascending;
}
SortOrder sortOrder =
sortDirection == ListSortDirection.Ascending ?
SortOrder.Ascending : SortOrder.Descending;

dgv1.Sort(sortColumn, sortDirection);

if (sortColumn.SortMode == DataGridViewColumnSortMode.Programmatic)
{
sortColumn.HeaderCell.SortGlyphDirection = sortOrder;
}
}




DataGridViewで行ソートができないようにする方法

DataGridViewで行ソートができないようにする方法
VB.NET
For Each c As DataGridViewColumn In dgv1.Columns
c.SortMode = DataGridViewColumnSortMode.NotSortable
Next c
C#
foreach (DataGridViewColumn c in dgv1.Columns)
c.SortMode = DataGridViewColumnSortMode.NotSortable;





DataGridViewの入力エラーを捕獲する方法

DataGridViewの入力エラーを捕獲する方法
VB.NET
Private Sub dgv1_DataError(ByVal sender As Object, _
ByVal e As DataGridViewDataErrorEventArgs) _
Handles dgv1.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#
private void dgv1_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
Private Sub dgv1_DataError(ByVal sender As Object, _
ByVal e As DataGridViewDataErrorEventArgs) _
Handles dgv1.DataError
e.Cancel = False
End Sub
C#
private void dgv1_DataError(object sender,
DataGridViewDataErrorEventArgs e)
{
e.Cancel = false;
}
















DataGridViewのセルの値を行単位でチェックする方法

DataGridViewのセルの値を行単位でチェックする方法
VB.NET
Private Sub dgv1_RowValidating(ByVal sender As Object, _
ByVal e As DataGridViewCellCancelEventArgs) _
Handles dgv1.RowValidating

Dim dgv As DataGridView = DirectCast(sender, DataGridView)
If e.RowIndex = dgv.NewRowIndex OrElse Not dgv.IsCurrentRowDirty Then
Exit Sub
End If


For Each cell As DataGridViewCell In dgv.Rows(e.RowIndex).Cells
If cell.Value Is Nothing OrElse cell.Value.ToString() = "" Then
dgv.Rows(e.RowIndex).ErrorText = _
"セルに値を入力してください"
e.Cancel = True
End If
Next
End Sub


Private Sub dgv1_RowValidated(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs) _
Handles dgv1.RowValidated

Dim dgv As DataGridView = DirectCast(sender, DataGridView)
dgv.Rows(e.RowIndex).ErrorText = Nothing
End Sub
C#
private void dgv1_RowValidating(object sender,
DataGridViewCellCancelEventArgs e)
{
DataGridView dgv = (DataGridView)sender;

if (e.RowIndex == dgv.NewRowIndex || !dgv.IsCurrentRowDirty)
{
return;
}

foreach (DataGridViewCell cell in dgv.Rows[e.RowIndex].Cells)
{
if (cell.Value == null || cell.Value.ToString() == "")
{
dgv.Rows[e.RowIndex].ErrorText =
"セルに値を入力してください";
e.Cancel = true;
}
}
}

private void dgv1_RowValidated(object sender,
DataGridViewCellEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
dgv.Rows[e.RowIndex].ErrorText = null;
}




















DataGridViewでセルの値をチェックする方法

DataGridViewでセルの値をチェックする方法
VB.NET
Private Sub dgv1_CellValidating(ByVal sender As Object, _
ByVal e As DataGridViewCellValidatingEventArgs) _
Handles dgv1.CellValidating

Dim dgv As DataGridView = DirectCast(sender, DataGridView)

If e.RowIndex = dgv.NewRowIndex OrElse Not dgv.IsCurrentCellDirty Then
Exit Sub
End If

If
dgv.Columns(e.ColumnIndex).Name = "
col1" AndAlso _
e.FormattedValue.ToString() = "" Then
dgv.Rows(e.RowIndex).ErrorText = "セルが未入力です"
e.Cancel = True
End If
End Sub


Private Sub dgv1_CellValidated(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs) _
Handles dgv1.CellValidated

Dim dgv As DataGridView = DirectCast(sender, DataGridView)
dgv.Rows(e.RowIndex).ErrorText = Nothing
End Sub
C#
private void dgv1_CellValidating(object sender,
DataGridViewCellValidatingEventArgs e)
{
DataGridView dgv = (DataGridView)sender;

if (e.RowIndex == dgv.NewRowIndex || !dgv.IsCurrentCellDirty)
{
return;
}

if (dgv.Columns[e.ColumnIndex].Name == "col1" &&
e.FormattedValue.ToString() == "")
{
dgv.Rows[e.RowIndex].ErrorText = "未入力セルが存在します";
e.Cancel = true;
}
}

private void dgv1_CellValidated(object sender,
DataGridViewCellEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
dgv.Rows[e.RowIndex].ErrorText = null;
}
















DataGridViewでErrorアイコンを表示する方法

DataGridViewでErrorアイコンを表示する方法
VB.NET
dgv1(0, 0).ErrorText = "セルエラー発生"
dgv1.Rows(3).ErrorText = "行エラー発生"
C#
dgv1[0, 0].ErrorText = "セルエラー発生";
dgv1.Rows[3].ErrorText = "行エラー発生";
CellErrorTextNeededイベントまたはRowErrorTextNeededイベントを活用する方法
VB.NET
Private Sub dgv1_CellErrorTextNeeded(ByVal sender As Object, _
ByVal e As DataGridViewCellErrorTextNeededEventArgs) _
Handles dgv1.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 = "0以上で入力してください"
End If
End Sub


Private Sub dgv1_RowErrorTextNeeded(ByVal sender As Object, _
ByVal e As DataGridViewRowErrorTextNeededEventArgs) _
Handles dgv1.RowErrorTextNeeded
Dim dgv As DataGridView = CType(sender, DataGridView)
If dgv("
col1", e.RowIndex).Value Is DBNull.Value AndAlso _
dgv("col2", e.RowIndex).Value Is DBNull.Value Then
e.ErrorText = _
"少なくとも
col1col2の一方は必須です"
End If
End Sub
C#
private void dgv1_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 = "
0以上で入力してください";
}
}

private void dgv1_RowErrorTextNeeded(object sender,
DataGridViewRowErrorTextNeededEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
if (dgv["
col1", e.RowIndex].Value == DBNull.Value &&
dgv["Column2", e.RowIndex].Value == DBNull.Value)
{
e.ErrorText =
"
少なくともcol1col2の一方は必須です";
}
}

























DataGridViewで新規行のセルの初期値を設定する方法

DataGridViewで新規行のセルの初期値を設定する方法
VB.NET
Private Sub dgv1_DefaultValuesNeeded(ByVal sender As Object, _
ByVal e As DataGridViewRowEventArgs) _
Handles dgv1.DefaultValuesNeeded
e.Row.Cells("col1").Value = 0
e.Row.Cells("col2").Value = "-"
End Sub
C#
private void dgv1_DefaultValuesNeeded(object sender,
DataGridViewRowEventArgs e)
{
e.Row.Cells["
col1"].Value = 0;
e.Row.Cells["col2"].Value = "-";
}













DataGridViewの新規行のスタイルを設定する方法

DataGridViewの新規行のスタイルを設定する方法
VB.NET
dgv1.RowTemplate.DefaultCellStyle.BackColor = Color.Blue
C#
dgv1.RowTemplate.DefaultCellStyle.BackColor = Color.Blue;


















DataGridViewの新規行の高さを設定する方法

DataGridViewの新規行の高さを設定する方法
VB.NET
dgv1.RowTemplate.Height = 50
dgv1.RowTemplate.MinimumHeight = 50
C#
dgv1.RowTemplate.Height = 50;
dgv1.RowTemplate.MinimumHeight = 50;














DataGridViewでセルの値を入力時に加工する方法

DataGridViewでセルの値を入力時に加工する方法
VB.NET
Private Sub dgv1_CellParsing(ByVal sender As Object, _
ByVal e As DataGridViewCellParsingEventArgs) _
Handles dgv1.CellParsing
Dim dgv As DataGridView = CType(sender, DataGridView)

If dgv.Columns(e.ColumnIndex).Name = "Column1" AndAlso _
e.DesiredType Is GetType(String) Then
e.Value = e.Value.ToString().ToUpper()
e.ParsingApplied = True
End If
End Sub
C#
private void dgv1_CellParsing(object sender,
DataGridViewCellParsingEventArgs e)
{
DataGridView dgv = (DataGridView)sender;

if (dgv.Columns[e.ColumnIndex].Name == "Column1" &&
e.DesiredType == typeof(string))
{
e.Value = e.Value.ToString().ToUpper();
e.ParsingApplied = true;
}
}





















DataGridViewでセルの値をフォーマットする方法

DataGridViewでセルの値をフォーマットする方法
VB.NET
Private Sub dgv1_CellFormatting(ByVal sender As Object, _
ByVal e As DataGridViewCellFormattingEventArgs) _
Handles dgv1.CellFormatting
Dim dgv As DataGridView = CType(sender, DataGridView)

If dgv.Columns(e.ColumnIndex).Name = "col1" AndAlso _
TypeOf e.Value Is String Then
Dim strA As String = e.Value.ToString()
e.Value = strA.ToUpper()
e.FormattingApplied = True
End If
End Sub
C#
private void dgv1_CellFormatting(object sender,
DataGridViewCellFormattingEventArgs e)
{
DataGridView dgv = (DataGridView)sender;

if (dgv.Columns[e.ColumnIndex].Name == "col1" && e.Value is string)
{
string strA = e.Value.ToString();
e.Value = strA.ToUpper();
e.FormattingApplied = true;
}
}
















DataGridViewの罫線のスタイルを変更する方法

DataGridViewの罫線のスタイルを変更する方法
VB.NET
dgv1.BorderStyle = BorderStyle.Fixed3D
C#
dgv1.BorderStyle = BorderStyle.Fixed3D;
DataGridViewのセルの罫線スタイルを変更する方法
VB.NET
dgv1.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal
dgv1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Sunken
dgv1.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
C#
dgv1.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal;
dgv1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Sunken;
dgv1.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
DataGridViewのセル罫線の色を変更する方法
VB.NET
dgv1.CellBorderStyle = DataGridViewCellBorderStyle.Single
dgv1.GridColor = Color.Red
C#
dgv1.CellBorderStyle = DataGridViewCellBorderStyle.Single;
dgv1.GridColor = Color.Red;
DataGridViewのセルの罫線を上下左右で個別に変更する方法
VB.NET
dgv1.AdvancedCellBorderStyle.Top = _
DataGridViewAdvancedCellBorderStyle.InsetDouble
dgv1.AdvancedCellBorderStyle.Right = _
DataGridViewAdvancedCellBorderStyle.Inset
dgv1.AdvancedCellBorderStyle.Bottom = _
DataGridViewAdvancedCellBorderStyle.Inset
dgv1.AdvancedCellBorderStyle.Left = _
DataGridViewAdvancedCellBorderStyle.InsetDouble
C#
dgv1.AdvancedCellBorderStyle.Top =
DataGridViewAdvancedCellBorderStyle.InsetDouble;
dgv1.AdvancedCellBorderStyle.Right =
DataGridViewAdvancedCellBorderStyle.Inset;
dgv1.AdvancedCellBorderStyle.Bottom =
DataGridViewAdvancedCellBorderStyle.Inset;
dgv1.AdvancedCellBorderStyle.Left =
DataGridViewAdvancedCellBorderStyle.InsetDouble;











DataGridViewに列を動的に追加する方法

DataGridViewに列を動的に追加する方法
VB.NET
dgv1.AutoGenerateColumns = False
dgv1.DataSource = BindingSource1

Dim textColumn As New DataGridViewTextBoxColumn()
textColumn.DataPropertyName = "col1"
textColumn.Name = "
col1"
textColumn.HeaderText = "col1"
dgv1.Columns.Add(textColumn)
C#
dgv1.AutoGenerateColumns = false;
dgv1.DataSource = BindingSource1;

DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn();
textColumn.DataPropertyName = "
col1";
textColumn.Name = "col1";
textColumn.HeaderText = "col1";
dgv1.Columns.Add(textColumn);





DataGridViewの特定セルまで自動スクロールさせる方法

DataGridViewの特定セルまで自動スクロールさせる方法
VB.NET
'先頭までスクロール
dgv1.FirstDisplayedScrollingRowIndex = 0
'先頭列までスクロール
dgv1.FirstDisplayedScrollingColumnIndex = 0
C#
//先頭行までスクロール
dgv1.FirstDisplayedScrollingRowIndex = 0;
//先頭列までスクロール
dgv1.FirstDisplayedScrollingColumnIndex = 0;

















DataGridViewでコンテキストメニューを表示する方法

DataGridViewでコンテキストメニューを表示する方法
VB.NET
dgv1.ContextMenuStrip = Me.ContextMenuStrip1

dgv1.Columns(0).ContextMenuStrip = Me.ContextMenuStrip2
dgv1.Columns(0).HeaderCell.ContextMenuStrip = Me.ContextMenuStrip2

dgv1.Rows(0).ContextMenuStrip = Me.ContextMenuStrip3

dgv1(0, 1).ContextMenuStrip = Me.ContextMenuStrip4
C#
dgv1.ContextMenuStrip = this.ContextMenuStrip1;

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

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

dgv1[0, 1].ContextMenuStrip = this.ContextMenuStrip4;
CellContextMenuStripNeeded、RowContextMenuStripNeededイベントでヒントを表示する方法
VB.NET
Private Sub dgv1_CellContextMenuStripNeeded( _
ByVal sender As Object, _
ByVal e As DataGridViewCellContextMenuStripNeededEventArgs) _
Handles dgv1.CellContextMenuStripNeeded
Dim dgv As DataGridView = CType(sender, DataGridView)
If e.RowIndex < 0 Then
e.ContextMenuStrip = Me.ContextMenuStrip1
ElseIf e.ColumnIndex < 0 Then
e.ContextMenuStrip = Me.ContextMenuStrip2
ElseIf TypeOf (dgv(e.ColumnIndex, e.RowIndex).Value) Is Integer Then
e.ContextMenuStrip = Me.ContextMenuStrip3
End If
End Sub
C#
private void dgv1_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;
}
}
VB.NET
Private Sub dgv1_RowContextMenuStripNeeded( _
ByVal sender As Object, _
ByVal e As DataGridViewRowContextMenuStripNeededEventArgs) _
Handles dgv1.RowContextMenuStripNeeded
Dim dgv As DataGridView = CType(sender, DataGridView)
Dim boolVal As Object = dgv("
col1", e.RowIndex).Value
Console.WriteLine(boolVal)
If TypeOf boolVal Is Boolean AndAlso CBool(boolVal) Then
e.ContextMenuStrip = Me.ContextMenuStrip1
End If
End Sub
C#
private void dgv1_RowContextMenuStripNeeded(object sender,
DataGridViewRowContextMenuStripNeededEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
object boolVal = dgv["col1", e.RowIndex].Value;
Console.WriteLine(boolVal);
if (boolVal is bool && (bool)boolVal)
{
e.ContextMenuStrip = this.ContextMenuStrip1;
}
}














DataGridViewのセルにツールチップを表示する方法

DataGridViewのセルにツールチップを表示する方法
VB.NET
dgv1(0, 0).ToolTipText = "編集不可"

dgv1.Columns(0).ToolTipText = "数値入力可"

dgv1.Rows(0).HeaderCell.ToolTipText = "行変更不可"
C#
dgv1[0, 0].ToolTipText = "編集不可";

dgv1.Columns[0].ToolTipText = "
数値入力可";

dgv1.Rows[0].HeaderCell.ToolTipText = "
行変更不可";

CellToolTipTextNeededイベントでヒント表示する方法
VB.NET
Private Sub dgv1_CellToolTipTextNeeded(ByVal sender As Object, _
ByVal e As DataGridViewCellToolTipTextNeededEventArgs) _
Handles dgv1.CellToolTipTextNeeded
e.ToolTipText = e.ColumnIndex.ToString() + ", " + e.RowIndex.ToString()
End Sub
C#
private void dgv1_CellToolTipTextNeeded(object sender,
DataGridViewCellToolTipTextNeededEventArgs e)
{
e.ToolTipText = e.ColumnIndex.ToString() + ", " + e.RowIndex.ToString();
}











DataGridViewのセルの値をクリップボードでコピーできるようにする方法

DataGridViewのセルの値をクリップボードでコピーできるようにする方法
VB.NET
dgv1.ClipboardCopyMode = _
DataGridViewClipboardCopyMode.EnableWithoutHeaderText
Clipboard.SetDataObject(dgv1.GetClipboardContent())
C#
dgv1.ClipboardCopyMode =
DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
Clipboard.SetDataObject(dgv1.GetClipboardContent());

DataGridViewへデータを張り付ける方法
VB.NET
If dgv1.CurrentCell Is Nothing Then
Return
End If
Dim
insertRowIndex As Integer = dgv1.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 = 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 <> dgv1.ColumnCount Then
Throw New
ApplicationException("列数に相違があります")
End If
Dim
row As DataGridViewRow = dgv1.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 (dgv1.CurrentCell == null)
return;
int insertRowIndex = dgv1.CurrentCell.RowIndex;

string pasteText = Clipboard.GetText();
if (string.IsNullOrEmpty(pasteText))
return;
pasteText = pasteText.Replace("\r\n", "\n");
pasteText = pasteText.Replace('\r', '\n');
pasteText = 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 != dgv1.ColumnCount)
throw new ApplicationException("列数に相違あり");
DataGridViewRow row = dgv1.Rows[insertRowIndex];
row.HeaderCell.Value = vals[0];
for (int i = 0; i < row.Cells.Count; i++)
{
row.Cells[i].Value = vals[i + 1];
}

insertRowIndex++;
}








DataGridViewの行ヘッダーに文字を表示する方法

DataGridViewの行ヘッダーに文字を表示する方法
VB.NET
Dim i As Integer
For
i = 0 To dgv1.Rows.Count - 1
dgv1.Rows(i).HeaderCell.Value = i.ToString()
Next i

dgv1.AutoResizeRowHeadersWidth( _
DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
C#
for (int i = 0; i < dgv1.Rows.Count; i++)
{
dgv1.Rows[i].HeaderCell.Value = i.ToString();
}

dgv1.AutoResizeRowHeadersWidth(
DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
DataGridViewの左上の固定セルに文字を表示する方法
VB.NET
dgv1.TopLeftHeaderCell.Value = "@"
C#
dgv1.TopLeftHeaderCell.Value = "@";







DataGridViewのヘッダーセルに値を設定する方法

DataGridViewのヘッダーセルに値を設定する方法

VB.NET

'列ヘッダーの先頭
dgv1.Columns(0).HeaderCell.Value = "先頭列"

'行ヘッダーの先頭
dgv1.Rows(0).HeaderCell.Value = "先頭行"

'左上のヘッダー固定部分
dgv1.TopLeftHeaderCell.Value = "左上"
C#
//列ヘッダーの先頭
dgv1.Columns[0].HeaderCell.Value = "先頭列";

//行ヘッダーの先頭
dgv1.Rows[0].HeaderCell.Value = "先頭行";

//左上のヘッダー固定部
dgv1.TopLeftHeaderCell.Value = "左上";














■■■