.NETプログラミング研究 第7号

お知らせ

5月1日からメールマガジンの末尾に「まぐまぐからのお知らせ」が挿入されるようになったそうです。これは「.NETプログラミング研究」がメールマガジンの送信に利用させていただいている「まぐまぐ」が無料配信のすべてのメールマガジンに挿入しているもので、「.NETプログラミング研究」の発行人が入れているものではありません。私としても不本意なのですが、ご了承ください。

.NET Tips

掲示板を見ていますと、DataGridコントロールに関する質問が非常に多いようです。しかしDataGridコントロールの使い方を解説したサイトはあまり見かけません。そこでDOBON.NETではDataGridコントロール(System.Windows.Forms)に関するTipsを紹介することにしました。この「.NETプログラミング研究」でも今回から集中的にDataGridコントロールに関するTipsを紹介していきます。

DataGridの現在のセルを取得、設定する

注意

この記事の最新版は「DataGridの現在のセルを取得、設定する」で公開しています。

説明の必要がないほどものすごく基本的なことですが、DataGridの現在のセルを取得、設定する方法を一応紹介しておきます。

DataGridの現在のセル(フォーカスのあるセル)はDataGridクラスのCurrentCellプロパティで取得、及び設定できます。

まず現在のセルを取得する例として、DataGrid1(DataGridオブジェクト)の現在のセルを取得し、その行、列数、値を表示する例を示します。

  1
  2
  3
  4
  5
  6
  7
  8
'現在のセルを取得
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)))
  1
  2
  3
  4
  5
  6
  7
  8
//現在のセルを取得
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)にする例を示します。

  1
  2
'現在のセルを(0,0)に設定
DataGrid1.CurrentCell = New DataGridCell(0, 0)
  1
  2
//現在のセルを(0,0)に設定
DataGrid1.CurrentCell = new DataGridCell(0, 0);

DataGridの一番下の新しい行(*行)が表示されないようにする

注意

この記事の最新版は「DataGridの一番下の新しい行(*行)が表示されないようにする」で公開しています。

DataGridの一番下の新しい行(*行)が表示されないようにするには、新しい行の追加を禁止すればよいわけです。

DataGridにおいて新しい行の追加、編集、削除をすべて禁止するには、DataGrid.ReadOnlyプロパティをTrueにします。

  1
DataGrid1.ReadOnly = True
  1
DataGrid1.ReadOnly = true;

DataGrid.ReadOnlyプロパティをTrueにすると、追加、編集、削除のすべてが禁止されてしまいます。追加のみを禁止にしたいときには、DataViewクラスのAllowNewプロパティをFalseにします。

次に新しい行の追加のみを禁止する例を示します。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
'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
  1
  2
  3
  4
  5
  6
  7
  8
  9
//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イベントはユーザーが新しいテーブルに移動すると発生します。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
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
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
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;
    }
}

コメント



ページ情報
  • カテゴリ : .NET
  • 作成日 : 2010-03-20 (土) 02:30:15
  • 作成者 : DOBON!
  • 最終編集日 : 2010-03-20 (土) 02:30:15
  • 最終編集者 : DOBON!
[ トップ ]   [ 新規 | 子ページ作成 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]