DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DOBON.NET

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

新しい行の追加、編集、削除を禁止する

新しい行の追加、編集、削除をすべて禁止する

DataGridにおいて新しい行の追加、編集、削除をすべて禁止するには、DataGrid.ReadOnlyプロパティをTrueにします。新しい行の追加を禁止すると、DataGridの一番下に表示される新しい行(*行)が表示されなくなります。つまり、DataGrid.ReadOnlyプロパティをTrueにすることで、*行を表示しないように出来ます。

[VB.NET]
DataGrid1.ReadOnly = True
[C#]
DataGrid1.ReadOnly = true;

新しい行の追加、編集、削除を個別に禁止する

DataGrid.ReadOnlyプロパティをTrueにすると、追加、編集、削除のすべてが禁止されてしまいます。例えば追加のみを禁止にしたいときには、DataViewクラスのAllowNewプロパティをFalseにします。同様に編集、削除を個別に禁止するには、DataViewクラスのAllowEditプロパティ、及びDataViewクラスのAllowDeleteプロパティをFalseにします。

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

[VB.NET]
'CurrencyManagerを取得する
'ここではDataGrid1.DataSourceに
'DataTableオブジェクトが設定されているものとする
Dim cm As CurrencyManager
cm = CType( _
    DataGrid1.BindingContext( _
        DataGrid1.DataSource, DataGrid1.DataMember), _
    CurrencyManager)
'DataViewを取得する
Dim dv As DataView = CType(cm.List, DataView)
'新しい行の追加を禁止する
dv.AllowNew = False
[C#]
//CurrencyManagerを取得する
//ここではDataGrid1.DataSourceに
//DataTableオブジェクトが設定されているものとする
CurrencyManager cm = 
    (CurrencyManager) DataGrid1.BindingContext[
        DataGrid1.DataSource, DataGrid1.DataMember];
//DataViewを取得する
DataView dv = (DataView) cm.List;
//新しい行の追加を禁止する
dv.AllowNew = false;

補足:CurrencyManager クラスには次のようにDataGridコントロールのNavigateイベントでAllowNewプロパティをFalseにする例が載っています。DataGrid.DataSourceにDataSetが設定されている場合に参考になります。

[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;
    }
}