我有一个数据库,在SQL Server 2008上运行了几个表,我正在编写一个带有.NET 3.5的Windows应用程序,使用提供的类来查询服务器。我遇到了一个问题,每个表中都包含一个看似持久的“空白”行。
例如,我将DataGridView绑定到BindingSource,其中DataSource是由连接到我的数据库的SqlDataAdapter构造的表,我在DataGrid上显示结果。该表中有1条记录:
dataGridView->DataSource = bindingSource;
bindingSource->DataSource = GetData(
"Select * From xxxx", Get_DB_String(), dataAdapter );
其中GetData定义为:
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;
}
以下网格是它产生的:
如果我检查table->Rows->Count
,在适配器填满表后,它会产生1,bindingSource->Count
也是如此。但是,在检查rows->Count
时,DataGridView会报告2行。
现在,如果我加载SQL Server Management Studio并查看我的表,我会看到以下视图:
但是,该行无法删除/删除,如果我编辑一行中单元格的任何内容,则只需添加一个新的整个NULL行。我认为这是出于某些目的而设计我不知道,但我也是这个问题。
如果我尝试从DataGridView中显式删除该行,它将返回:“无法删除未提交的新行”,并且在使用SqlDataAdapter填充后,我无法尝试从表中删除该行,因为它没有不要把它报告在那里。
这个问题不仅严重破坏了应用程序的美观,而且还破坏了功能,因为我无法在绑定的DataGridView上运行不存在的数据的例程。
我希望我能够简明扼要地传达我的问题。谢谢。
答案 0 :(得分:4)
此行用于在数据集中插入新记录。如果你把它留空,那么它只是留空。如果您开始编辑它 - 它等待编辑完成(当您将焦点设置在此行之外)并添加具有指定字段值的新记录。
如果要在DataGridView中禁用此功能,只需将属性AllowUserToAddRows
设置为false,如下所示:
dataGridView->AllowUserToAddRows = false;
dataGridView->DataSource = bindingSource;
...
答案 1 :(得分:2)
您的底行是用于手动插入新行的默认“新行”。我不认为你可以摆脱它(我知道你不能在SQL中,但如果你可以在你的GridView中,它将是控件的属性)。
答案 2 :(得分:1)
您也可以在表单设计器中设置它;单击控件,转到“属性”窗口并设置AllowUsersToAddRows = false。