• 追加された行はこの色です。
  • 削除された行はこの色です。
#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の現在のセルを取得、設定する方法を一応紹介しておきます。

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の一番下の新しい行(*行)が表示されないようにするには、新しい行の追加を禁止すればよいわけです。

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!)

[ トップ ]   [ 新規 | 子ページ作成 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]