#title(.NETプログラミング研究 第7号) #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!) |