Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2013, 14:00   #1
tumanovalex
Пользователь
 
Регистрация: 07.03.2011
Сообщений: 83
Вопрос Работа с BindingNavigator

Сделал так:
Код:
namespace ADOnet
{
  public partial class Form1 : Form
  {

    private DataSet ds;
    private OleDbDataAdapter da;
    OleDbCommand cmd;
    OleDbConnection con;
    OleDbParameter p;
    BindingSource bs;

    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      openDb();
      ds = new DataSet();
      ds.Tables.Add("tbl1ds");
      da = new OleDbDataAdapter();
      cmd = con.CreateCommand();
      cmd.CommandText = "SELECT *FROM tbl1";
      da.SelectCommand = cmd;
      da.FillSchema(ds, SchemaType.Source, "tbl1ds");
      da.Fill(ds, "tbl1ds");
      cmd.CommandText = "SELECT *FROM tbl2";
      da.SelectCommand = cmd;
      da.FillSchema(ds, SchemaType.Source, "tbl2ds");
      bs = new BindingSource();
      bs.DataSource = ds.Tables[0];
      bsnav.BindingSource = bs;
      dgv1.DataSource = bs;
      daInsert();
      daUpdate();
      daDelete();
    }

    private void daInsert()
    {
      string strIns = "INSERT INTO tbl1(id, txt) VALUES (?, ?)";
      OleDbCommand insertCmd = new OleDbCommand(strIns, con);
      da.InsertCommand = insertCmd;
      p = new OleDbParameter("@id", OleDbType.Integer);
      p.SourceColumn = "id";
      p.SourceVersion = DataRowVersion.Original;
      insertCmd.Parameters.Add(p);
      p = new OleDbParameter("@txt", OleDbType.VarChar);
      p.SourceColumn = "txt";
      p.SourceVersion = DataRowVersion.Original;
      insertCmd.Parameters.Add(p);
    }

    private void daUpdate()
    {
      string strUpd = "UPDATE tbl1 SET txt = ? WHERE id = ?"; 
      OleDbCommand updateCmd = new OleDbCommand(strUpd, con);
      da.UpdateCommand = updateCmd;
      p = new OleDbParameter("@txt", OleDbType.VarChar);
      p.SourceColumn = "txt";
      p.SourceVersion = DataRowVersion.Current;
      updateCmd.Parameters.Add(p);
      p = new OleDbParameter("@id", OleDbType.Integer);
      p.SourceColumn = "id";
      p.SourceVersion = DataRowVersion.Original;
      updateCmd.Parameters.Add(p);
    }

    private void daDelete()
    {
      string strDel = "DELETE FROM tbl1 WHERE id = ? AND txt = ?";
      OleDbCommand deleteCmd = new OleDbCommand(strDel, con);
      da.DeleteCommand = deleteCmd;
      p = new OleDbParameter("@id", OleDbType.Integer);
      p.SourceColumn = "id";
      p.SourceVersion = DataRowVersion.Current;
      deleteCmd.Parameters.Add(p);
      p = new OleDbParameter("@txt", OleDbType.VarChar);
      p.SourceColumn = "txt";
      p.SourceVersion = DataRowVersion.Current;
      deleteCmd.Parameters.Add(p);
    }

    private void openDb()
    {
      con = new OleDbConnection();
      con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\Adonet.mdb";
      try
      {
        con.Open();
      }
      catch
      {
        MessageBox.Show("Ошибка соединения с базой данных AdoStudy.mdb");
        Application.Exit();
      }
    }

    private void bindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
      da.Update(ds.Tables[0]);
    }

    private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
    {
      DataRowView dr = (DataRowView) bs.Current;
      dr.Delete();
    }

    private void bindingNavigatorMoveNextItem_Click(object sender, EventArgs e)
    {
      bs.MoveNext();
    }

    private void bindingNavigatorMovePreviousItem_Click(object sender, EventArgs e)
    {
      bs.MovePrevious();

    }

    private void bindingNavigatorMoveFirstItem_Click(object sender, EventArgs e)
    {
      bs.MoveFirst();
    }

    private void bindingNavigatorMoveLastItem_Click(object sender, EventArgs e)
    {
      bs.MoveLast();
    }

    private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
    {
      bs.AddNew();
    }
  }
}
В результате:
- при перемещении выделяется не следующая строка, а через одну;
- при удалении удаляется текущая и следующая за ней строки;
- правильно работает только добавление записи и переход вначало/конец записей.
Подскажите, пожалуйста, что я сделал неправильно. Код проекта прилагаю.
Вложения
Тип файла: zip AdoNet2.zip (29.7 Кб, 12 просмотров)
tumanovalex вне форума Ответить с цитированием
Старый 10.06.2014, 22:28   #2
TUVAI
Новичок
Джуниор
 
Регистрация: 26.02.2012
Сообщений: 1
По умолчанию

Если еще актуально, то bs.MovePrevious() и bs.MoveNext() вообще не нужны. После их удаления всё работает нормально.
TUVAI вне форума Ответить с цитированием
Старый 14.06.2014, 11:38   #3
tumanovalex
Пользователь
 
Регистрация: 07.03.2011
Сообщений: 83
По умолчанию

Спасибо большое!
tumanovalex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Один BindingNavigator для нескольких Datagridview prod C# (си шарп) 1 26.02.2012 12:50
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00