┏第7号━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃         .NETプログラミング研究         ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜メニュー ■お知らせ ■.NET Tips ・DataGridの現在のセルを取得、設定する ・DataGridの一番下の新しい行(*行)が表示されないようにする 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 ─────────────────────────────── ■お知らせ ─────────────────────────────── 5月1日からメールマガジンの末尾に「まぐまぐからのお知らせ」が挿 入されるようになったそうです。これは「.NETプログラミング研究」 がメールマガジンの送信に利用させていただいている「まぐまぐ」が 無料配信のすべてのメールマガジンに挿入しているもので、「.NETプ ログラミング研究」の発行人が入れているものではありません。私と しても不本意なのですが、ご了承ください。 ─────────────────────────────── ■.NET Tips ─────────────────────────────── 掲示板を見ていますと、DataGridコントロールに関する質問が非常に 多いようです。しかしDataGridコントロールの使い方を解説したサイ トはあまり見かけません。そこでDOBON.NETではDataGridコントロール (System.Windows.Forms)に関するTipsを紹介することにしました。こ の「.NETプログラミング研究」でも今回から集中的にDataGridコント ロールに関するTipsを紹介していきます。 ─────────────────────────────── ●DataGridの現在のセルを取得、設定する 説明の必要がないほどものすごく基本的なことですが、DataGridの現 在のセルを取得、設定する方法を一応紹介しておきます。 DataGridの現在のセル(フォーカスのあるセル)はDataGridクラスの CurrentCellプロパティで取得、及び設定できます。 まず現在のセルを取得する例として、DataGrid1(DataGridオブジェク ト)の現在のセルを取得し、その行、列数、値を表示する例を示しま す。 '[VB.NET]・・・・・・・・・・・・・・・・・・・・・・・・・・ '現在のセルを取得 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))) '・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //[C#]・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //現在のセルを取得 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)にする例を示 します。 '[VB.NET]・・・・・・・・・・・・・・・・・・・・・・・・・・ '現在のセルを(0,0)に設定 DataGrid1.CurrentCell = New DataGridCell(0, 0) '・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //[C#]・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //現在のセルを(0,0)に設定 DataGrid1.CurrentCell = new DataGridCell(0, 0); //・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ ・DataGridの現在のセルを取得、設定する http://dobon.net/vb/dotnet/datagrid/currentcell.html ─────────────────────────────── ●DataGridの一番下の新しい行(*行)が表示されないようにする DataGridの一番下の新しい行(*行)が表示されないようにするには、新 しい行の追加を禁止すればよいわけです。 DataGridにおいて新しい行の追加、編集、削除をすべて禁止するには、 DataGrid.ReadOnlyプロパティをTrueにします。 '[VB.NET]・・・・・・・・・・・・・・・・・・・・・・・・・・ DataGrid1.ReadOnly = True '・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //[C#]・・・・・・・・・・・・・・・・・・・・・・・・・・・・ DataGrid1.ReadOnly = true; //・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ DataGrid.ReadOnlyプロパティをTrueにすると、追加、編集、削除のす べてが禁止されてしまいます。追加のみを禁止にしたいときには、 DataViewクラスのAllowNewプロパティをFalseにします。 次に新しい行の追加のみを禁止する例を示します。 '[VB.NET]・・・・・・・・・・・・・・・・・・・・・・・・・・ '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 '・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //[C#]・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //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イベントはユー ザーが新しいテーブルに移動すると発生します。 '[VB.NET]・・・・・・・・・・・・・・・・・・・・・・・・・・ 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 '・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //[C#]・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 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; } } //・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ ・DataGridの一番下の新しい行(*行)が表示されないようにする http://dobon.net/vb/dotnet/datagrid/allownew.html =============================== ■このマガジンの購読、購読中止、バックナンバー、説明に関しては  次のページをご覧ください。  http://www.mag2.com/m/0000104516.htm ■発行人・編集人:どぼん!  http://dobon.net  dobon@bigfoot.com ■ご質問等はメールではなく、掲示板へお願いいたします。  http://dobon.net/bbs ■上記メールアドレスへのメールは確実に読まれる保障はありません  (スパム、ウィルス対策です)。メールは下記URLのフォームメール  から送信してください。  http://dobon.net/mail.html Copyright (c) 2003 DOBON! All rights reserved. ===============================