2015-03-23 2 views
0

Я хочу разрешить пользователю добавлять строки, но пустая строка должна находиться в первой позиции, чтобы пользователь мог вводить данные без прокрутки вниз каждый раз, чтобы вставить новую строку?!Можно ли изменить положение пустой строки в конце datagridview?

http://i.stack.imgur.com/YDh6o.png

Это, как я добавить строки в DataGridView:

using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Globalization; 
using System.Windows.Forms; 

namespace Parc_Automobile 
{ 
    public class SqlHelper 
    { 
     private const string ConnectionString = 
      "Data Source=KIM;Initial Catalog=TestingBlank;Integrated Security=True"; 

     private readonly DataGridView _dgv; 
     private BindingSource _bindingSource; 
     private DataTable _dataTable; 
     private string _selectQueryString; 
     private SqlConnection _sqlConnection; 
     private SqlDataAdapter _sqlDataAdapter; 

     protected SqlHelper(DataGridView dgv) 
     { 
      _dgv = dgv; 
     } 

     //display a table in datagridview 
     public void ShowTable(String tableName) 
     { 
      _sqlConnection = new SqlConnection(ConnectionString); 
      _sqlConnection.Open(); 

      _selectQueryString = "SELECT * FROM " + tableName; 
      _sqlDataAdapter = new SqlDataAdapter(_selectQueryString, _sqlConnection); 
      var sqlCommandBuilder = new SqlCommandBuilder(_sqlDataAdapter); 
      _dataTable = new DataTable(); 
      _sqlDataAdapter.Fill(_dataTable); 
      _bindingSource = new BindingSource {DataSource = _dataTable}; 

      var tempRow = this._dataTable.NewRow(); 
      this._dataTable.Rows.InsertAt(tempRow, 0); 

      _dgv.DataSource = _bindingSource; 
      _sqlConnection.Close(); 
     } 

     //Search In datagridview using input of users 
     public void SearchTable(String SearchText, String columnNameToSearch, int type) 
     { 
      try 
      { 
       var filterBuilder = ""; 
       switch (type) 
       { 
        case TEXT_COLUMN: 
         filterBuilder = columnNameToSearch + " LIKE '" + SearchText + "%'"; 
         break; 

        case NUMERIC_COLUMN: 
         filterBuilder = columnNameToSearch + " = '" + SearchText + "'"; 
         break; 
       } 
       var bs = new BindingSource 
       { 
        DataSource = _dgv.DataSource, 
        Filter = filterBuilder 
       }; 
       _dgv.DataSource = bs; 
      } 
      catch (Exception e) 
      { 
       // ignored 
      } 
     } 

     public void DeleteRow() 
     { 
      if (_dgv.CurrentRow != null) _dgv.Rows.RemoveAt(_dgv.CurrentRow.Index); 
      _sqlDataAdapter.Update(_dataTable); 
     } 

     public void SaveChanges(Label label) 
     { 
      try 
      { 
       _sqlDataAdapter.Update(_dataTable); 
       label.Text = "Changement a été effectué avec succès."; 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show("" + e); 
      } 
     } 
    } 
} 

ответ

0

При добавлении новой строки используйте Insert метод вместо Add. Insert позволяет указать индекс для новой строки. Установить индекс 0:

this.dataGridView1.Rows.Insert(0,new DataGridViewRow()); 

EDIT Я

Настройка ответа на Ваш комментарий: если вы используете привязки к источнику данных вы должны создать новую строку, используя источник данных. Затем вы вставляете его в указанное положение. Предположим, что у вас есть источник данных myDataSet с таблицей Log. Этот код создает новую строку и вставьте его в качестве первой строки:

var tempRow = this.myDataSet.Log.NewRow(); 
this.myDataSet.Log.Rows.InsertAt(tempRow, 0); 

Вашего DataGridView будет обновляться соответствующим образом.

EDIT II

вы получите исключение, если вы пытаетесь, например, назначить тип данных, отличный от типа столбца в таблице. Скажем, столбец ID is int, но вы пытаетесь добавить string. Для обработки ошибок данных необходимо обработать событие DataError. Ниже приведен пример вашего кода.

protected SqlHelper(DataGridView dgv) 
{ 
    _dgv = dgv; 
    _dgv.DataError += _dgv_DataError; 
} 

void _dgv_DataError(object sender, DataGridViewDataErrorEventArgs e) 
{ 
    if (e.Exception != null) 
    { 
     MessageBox.Show(string.Format("Incorrect data: {0}", e.Exception.Message)); 
     e.Cancel = false; 

     // handle the exception 
    } 
} 
+0

Я добавил этот код в конструкторе формы, но я получаю сообщение об ошибке: Ряды не может быть программно добавлены в коллекцию строк в DataGridView, когда элемент управления с привязкой к данным. – Kimmy

+0

В этом случае вам необходимо создать строку в источнике данных и вставить новую строку с указанной позицией в эту строку данных. Я добавлю изменения через минуту. – PiotrWolkowski

+0

жаль беспокоить вас Я попытался применить ваш новый ответ, но я не использовал набор данных в своем коде, не могли бы вы мне помочь. Я добавил в вопрос, как я показываю строки, извините, что я абсолютный новичок. – Kimmy

Смежные вопросы