- 追加された行はこの色です。
- 削除された行はこの色です。
#title(.NETプログラミング研究 第7号)
#navi(.NET プログラミング研究)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第7号 [#f4ec52c1]
**お知らせ [#t4e1cb2c]
5月1日からメールマガジンの末尾に「まぐまぐからのお知らせ」が挿入されるようになったそうです。これは「.NETプログラミング研究」がメールマガジンの送信に利用させていただいている「まぐまぐ」が無料配信のすべてのメールマガジンに挿入しているもので、「.NETプログラミング研究」の発行人が入れているものではありません。私としても不本意なのですが、ご了承ください。
**.NET Tips [#rd48c4b0]
掲示板を見ていますと、DataGridコントロールに関する質問が非常に多いようです。しかしDataGridコントロールの使い方を解説したサイトはあまり見かけません。そこでDOBON.NETではDataGridコントロール(System.Windows.Forms)に関するTipsを紹介することにしました。この「.NETプログラミング研究」でも今回から集中的にDataGridコントロールに関するTipsを紹介していきます。
***DataGridの現在のセルを取得、設定する [#o9a79a99]
#column(注意){{
この記事の最新版は「[[DataGridの現在のセルを取得、設定する>http://dobon.net/vb/dotnet/datagrid/currentcell.html]]」で公開しています。
この記事の最新版は「[[DataGridの現在のセルを取得、設定する>https://dobon.net/vb/dotnet/datagrid/currentcell.html]]」で公開しています。
}}
説明の必要がないほどものすごく基本的なことですが、DataGridの現在のセルを取得、設定する方法を一応紹介しておきます。
DataGridの現在のセル(フォーカスのあるセル)はDataGridクラスのCurrentCellプロパティで取得、及び設定できます。
まず現在のセルを取得する例として、DataGrid1(DataGridオブジェクト)の現在のセルを取得し、その行、列数、値を表示する例を示します。
#code(vbnet){{
'現在のセルを取得
Dim c As DataGridCell = DataGrid1.CurrentCell
'セルの情報を表示
Dim rn As Integer = c.RowNumber
Console.WriteLine("選択されているセルの行:{0}", rn)
Dim cn As Integer = c.ColumnNumber
Console.WriteLine("選択されているセルの列:{0}", cn)
Console.WriteLine("選択されているセルの値:{0}", CStr(DataGrid1(rn, cn)))
}}
#code(csharp){{
//現在のセルを取得
DataGridCell c = dataGrid1.CurrentCell;
//セルの情報を表示
int rn = c.RowNumber;
Console.WriteLine("選択されているセルの行:{0}", rn);
int cn = c.ColumnNumber;
Console.WriteLine("選択されているセルの列:{0}", cn);
Console.WriteLine("選択されているセルの値:{0}", dataGrid1[rn, cn].ToString());
}}
次に現在のセルを設定する例として、現在のセルを(0,0)にする例を示します。
#code(vbnet){{
'現在のセルを(0,0)に設定
DataGrid1.CurrentCell = New DataGridCell(0, 0)
}}
#code(csharp){{
//現在のセルを(0,0)に設定
DataGrid1.CurrentCell = new DataGridCell(0, 0);
}}
***DataGridの一番下の新しい行(*行)が表示されないようにする [#fc59d799]
#column(注意){{
この記事の最新版は「[[DataGridの一番下の新しい行(*行)が表示されないようにする>http://dobon.net/vb/dotnet/datagrid/allownew.html]]」で公開しています。
この記事の最新版は「[[DataGridの一番下の新しい行(*行)が表示されないようにする>https://dobon.net/vb/dotnet/datagrid/allownew.html]]」で公開しています。
}}
DataGridの一番下の新しい行(*行)が表示されないようにするには、新しい行の追加を禁止すればよいわけです。
DataGridにおいて新しい行の追加、編集、削除をすべて禁止するには、DataGrid.ReadOnlyプロパティをTrueにします。
#code(vbnet){{
DataGrid1.ReadOnly = True
}}
#code(csharp){{
DataGrid1.ReadOnly = true;
}}
DataGrid.ReadOnlyプロパティをTrueにすると、追加、編集、削除のすべてが禁止されてしまいます。追加のみを禁止にしたいときには、DataViewクラスのAllowNewプロパティをFalseにします。
次に新しい行の追加のみを禁止する例を示します。
#code(vbnet){{
'CurrencyManagerを取得する
'ここではDataGrid1.DataSourceに
'DataTableオブジェクトが設定されているものとする
Dim cm As CurrencyManager
cm = CType(Me.BindingContext(DataGrid1.DataSource), _
CurrencyManager)
'DataViewを取得する
Dim dv As DataView = CType(cm.List, DataView)
'新しい行の追加を禁止する
dv.AllowNew = False
}}
#code(csharp){{
//CurrencyManagerを取得する
//ここではDataGrid1.DataSourceに
//DataTableオブジェクトが設定されているものとする
CurrencyManager cm =
(CurrencyManager) this.BindingContext[DataGrid1.DataSource];
//DataViewを取得する
DataView dv = (DataView) cm.List;
//新しい行の追加を禁止する
dv.AllowNew = false;
}}
ヘルプ(ms-help://MS.VSCC/MS.MSDNVS.1041/cpref/html/
frlrfsystemwindowsformscurrencymanagerclasslisttopic.htm)では、次のようにDataGridコントロールのNavigateイベントでAllowNewプロパティをFalseにする例が紹介されています。Navigateイベントはユーザーが新しいテーブルに移動すると発生します。
#code(vbnet){{
Private Sub Grid_Navigate(sender As Object, e As NavigateEventArgs)
If e.Forward Then
Dim ds As DataSet = CType(grid.DataSource, DataSet)
Dim cm As CurrencyManager = _
CType(BindingContext(ds,"Customers.CustOrders"), CurrencyManager)
'AllowNewプロパティを設定するため、IListをDataViewにキャストする
Dim dv As DataView = CType(cm.List, DataView)
dv.AllowNew = false
End If
End Sub
}}
#code(csharp){{
private void Grid_Navigate(object sender, NavigateEventArgs e)
{
if (e.Forward )
{
DataSet ds = (DataSet) grid.DataSource;
CurrencyManager cm =
(CurrencyManager)BindingContext[ds,"Customers.CustOrders"];
//AllowNewプロパティを設定するため、IListをDataViewにキャストする
DataView dv = (DataView) cm.List;
dv.AllowNew = false;
}
}
}}
**コメント [#xbe873a8]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2003-05-13 (火) 06:00:00,DOBON!,2010-03-20 (土) 02:31:26,DOBON!)