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

DataGridの一番下の新しい行(*行)が表示されないようにする
新しい行の追加、編集、削除を禁止する

注意:ここで紹介しているDataGridは、System.Windows.Forms名前空間のDataGrid(Windowsフォーム)です。System.Web.UI.WebControls名前空間のDataGrid(Webフォーム)ではありません。

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

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

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。