2012-01-24 9 views
2

SQL Server 2008で実行されるいくつかのテーブルを持つデータベースがあり、クエリに提供されたクラスを使用して.NET 3.5でWindowsアプリケーションをプログラミングしていますサーバー。私はすべてのテーブルに一貫している "空白"の行が含まれているという問題を抱えています。「Ghost」行、SQL Server 2008 + .NET Windowsプログラミング

たとえば、DataGridViewをBindingSourceにバインドします.BindingSourceのデータソースは、データベースに接続するSqlDataAdapterによって構築されたテーブルです。DataGridに結果を表示します。 GetDataのは次のように定義されて

dataGridView->DataSource = bindingSource; 
bindingSource->DataSource = GetData(
    "Select * From xxxx", Get_DB_String(), dataAdapter); 

:テーブルには、その中の1つのレコードを持ってい

DataTable^ GetData(
    String^ sqlCommand, 
    String^ connectionString, 
    SqlDataAdapter^ adapter) 
    { 
     SqlConnection^ Connection = gcnew SqlConnection(connectionString); 
     SqlCommand^ command = gcnew SqlCommand(sqlCommand,Connection); 
     adapter->SelectCommand = command; 
     DataTable^ table = gcnew DataTable; 
     adapter->Fill(table); 
     return table; 
    } 

、次のグリッドをそれが生成するものである:

grid

私がチェックした場合table->Rows->Countは、アダプターが表を塗りつぶした直後に、bindingSource->Countと同様に1を生成します。ただし、rows->Countをチェックすると、DataGridViewは2行を報告します。しかし、行が削除/削除することができない

grid

:私はSQL Server Management Studioをロードし、私のテーブルを見れば今、私は次のビューを提示してい

行のセルの内容のいずれかを編集すると、NULL行全体が単純に追加されます。私はそれが私が気づいていないいくつかの目的のために設計されていると仮定しますが、私はまたこれが問題であることにつきました。

DataGridViewから明示的に行を削除しようとすると、「コミットされていない新しい行を削除できません」が返され、SqlDataAdapterでその行を削除することはできません。そこにいると報告しません。

この問題は、存在しないデータでバインドされたDataGridViewでルーチンを実行することができないため、アプリケーションの美しさだけでなく機能性も破壊されています。

私は自分の問題を伝えるのに十分簡潔であることを望みます。ありがとうございました。

答えて

4

この行は、あなたのデータセットに新しいレコードを挿入するための行です。空白のままにしておくと、空白のままになります。編集を開始すると、編集が完了するのを待ち(この行からフォーカスを外したとき)、指定されたフィールド値を持つ新しいレコードを追加します。

あなたはDataGridViewの中で、この機能を無効にしたい場合は、ちょうどこのように、falseにプロパティAllowUserToAddRowsを設定します。

dataGridView->AllowUserToAddRows = false; 
dataGridView->DataSource = bindingSource; 
... 
+0

ありがとうございます、そのプロパティを変更するとは思わなかったです。その余分なテーブルの行にぶら下がっていた。しかし、後見ではかなりの意味があります。 –

2

あなたの一番下の行は、手動で新しい行を挿入するために使用されるデフォルトの「新しい行」です。私はあなたがそれを取り除くことができないと思う(私はあなたがSQLではcantを知っているが、あなたのGridViewにすることができれば、それはコントロールのプロパティになります)。

1

フォームデザイナーで設定することもできます。コントロールをクリックし、プロパティウィンドウに移動し、AllowUsersToAddRows = falseを設定します。