2012-01-24 55 views
2

我有一个在SQL Server 2008上运行的几个表的数据库,我正在编程一个Windows应用程序W/.NET 3.5,使用提供的查询类服务器。我遇到了每个表格中包含一个看似持久的“空白”行的问题。“幽灵”行,SQL Server 2008 + .NET 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; 
    } 

及以下电网就是它产生:

grid

如果我检查table->Rows->Count,在适配器填满表格后,它会产生1,就像bindingSource->Count一样。但是,检查rows->Count时,DataGridView报告2行。现在

,如果我加载SQL Server Management Studio中,看看我的表,我出现以下观点:

grid

然而,该行不能被删除/移除,如果我编辑一行中单元格的任何内容,它只是添加一个新的整个NULL行。我认为这是为了某种我不知道的目的而设计的,但我也挂上了这个问题。

如果我试图从DataGridView中显式删除该行,它将返回一个“未提交的新行无法删除”,并且我无法在填充SqlDataAdapter后从我的表中删除该行,因为它不报告它在那里。

这个问题不仅对应用程序的美观,而且对功能造成严重破坏,因为我无法在绑定的DataGridView上使用不存在的数据运行例程。

我希望我能够简洁地传达我的问题。谢谢。

回答

4

此行用于在数据集中插入新记录。如果你把它留空,那么它只是保持空白。如果您开始编辑它 - 它会等待编辑完成(当您将焦点设置在此行之外)并添加具有指定字段值的新记录时。

如果要禁用DataGridView中这个功能,那么仅仅是属性AllowUserToAddRows设置为false,像这样:

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

谢谢,没想到要修改那个属性。被挂在额外的桌子上。然而,事后看来很有道理。 –

2

你的最下面一行是用于手动插入新行默认的“新建行”。我不认为你可以摆脱它(我知道你不能在SQL中,但如果你可以在你的GridView中,它将是控件的属性)。

1

你也可以在表单设计器中设置它;点击该控件,进入属性窗口并设置AllowUsersToAddRows = false。