«Призрачная» строка, SQL Server 2008 + .NET для Windows - PullRequest
2 голосов
/ 25 января 2012

У меня есть база данных с несколькими таблицами, работающими на SQL Server 2008, и я программирую приложение для Windows с .NET 3.5, используя классы, предоставленные для запроса к серверу. У меня возникла проблема с кажущейся стойкой «пустой» строкой, включенной в каждую таблицу.

Например, я связываю 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. Однако DataGridView сообщает о 2 строках при проверке rows->Count.

Теперь, если я загружаю SQL Server Management Studio и смотрю на свою таблицу, я получаю следующее представление:

grid

Однако строку невозможно удалить / удалить, и если я редактирую любое содержимое ячейки в строке, он просто добавляет новую целую строку NULL. Я предполагаю, что это сделано для какой-то цели, о которой я не знаю, но я также одержим этой проблемой.

Если я пытаюсь явно удалить строку из DataGridView, он возвращает: «Неизвестная новая строка не может быть удалена», и я не могу попытаться удалить строку из моей таблицы после ее заполнения SqlDataAdapter, потому что она не не сообщайте об этом как о находящемся там.

Эта проблема наносит ущерб не только эстетике приложения, но и его функциональности, потому что я не могу запустить подпрограммы в привязанном DataGridView с данными, которых не существует.

Я надеюсь, что был достаточно кратким, чтобы передать мою проблему. Спасибо.

Ответы [ 3 ]

4 голосов
/ 25 января 2012

Эта строка предназначена для вставки новых записей в ваш набор данных. Если вы оставите это поле пустым, оно останется пустым. Если вы начинаете редактировать его - он ожидает окончания редактирования (когда вы устанавливаете фокус из этой строки) и добавляет новую запись с указанными значениями поля.

Если вы хотите отключить эту функцию в DataGridView, просто установите для свойства AllowUserToAddRows значение false, например:

dataGridView->AllowUserToAddRows = false;
dataGridView->DataSource = bindingSource;
...
2 голосов
/ 25 января 2012

Ваша нижняя строка - это «Новая строка» по умолчанию, используемая для вставки новой строки вручную.Я не думаю, что вы можете избавиться от этого (я знаю, что вы не можете в SQL, но если вы можете в вашем GridView, это будет свойство элемента управления).

1 голос
/ 25 января 2012

Вы также можете установить это в дизайнере форм;щелкните элемент управления, перейдите в окно «Свойства» и задайте AllowUsersToAddRows = false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...