none
Работа c BindingNavigator RRS feed

  • Вопрос

  • опробовал настроить работы с BindingNavigator:
    private void setBsnav()
    {
      bs = new BindingSource();
      bs.DataSource = ds.Tables[0];
      bsnav.BindingSource = bs;
    }
    
    private void bindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
      da.Update(ds.Tables[0]);
    }
    
    private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
    {
      da.Update(ds.Tables[0]);
    }
    
    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();
    }
    Однако перемещение по строкам в таблице не происходит, при удалении почему-то удаляется первая запись, а не текущая. Подскажите, пожалуйста, как правильно настроить элементы управления BindingNavigator. Проект разместил на http://zalil.ru/34454979

    Alex

    21 апреля 2013 г. 12:01

Ответы

Все ответы

  • Здравствуйте,

    По поводу удаления, смотрите решение, которое пользователь нашел здесь:

    Delete list item with BindingNavigator, not correct item

    • Помечено в качестве ответа tumanovalex 23 апреля 2013 г. 20:29
    22 апреля 2013 г. 14:26
    Модератор
  • Спасибо, обязательно посмотрю.


    Alex

    23 апреля 2013 г. 20:28
  • Вот попробовал сделать так:

    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();
        }
      }
    }
    
    В результате:
    - при перемещении выделяется не следующая строка, а через одну;
    - при удалении удаляется текущая и следующая за ней строки;
    - правильно работает только добавление записи и переход вначало/конец записей.
    Подскажите, пожалуйста, что я сделал неправильно. Проект разместил на http://zalil.ru/34463936

    Alex

    24 апреля 2013 г. 17:51