我要实现在bindingsource上保存与另存.
请参看基础代码: private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
        {
            this.bindingSource.AddNew();
        }
/// <summary>
        /// Save
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            this.bindingSource.EndEdit();
            this.bindingSource.ResetBindings(false);
        }
        /// <summary>
        /// save as 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            DataRow dr = this.ds.Tables["Test"].NewRow();
            dr.BeginEdit();
            dr["Content"] = this.textBox1.Text.Trim();
            dr["Re"] = this.textBox2.Text.Trim();
            dr.EndEdit();
            this.ds.Tables["Test"].Rows.Add(dr);
            this.bindingSource.ResetBindings(false);
        }
这里就是另存的...但是这样写不能保证,光标会跟着到另存的那条记录上去,如果用this.bindingsource.movelast到最后一条也不对,因为有的时候有排序

解决方案 »

  1.   

    to 这里就是另存的...但是这样写不能保证,光标会跟着到另存的那条记录上去,如果用this.bindingsource.movelast到最后一条也不对,因为有的时候有排序由于绑定的最终是DataView,你可以通过DataView.Find来获得新DataRow的Position,然后指定bindingmanagerbase.Position即可。
      

  2.   

    感谢愚翁的回答.
    我的数据表只有一个自动增长的主键.我此时只是把datarow加到了dataset中,还未提交更新到数据库,无法得到唯一的主键,所以用find是不现实的啊.
      

  3.   

    看了半天还是没搞明白楼主说的所谓‘另存’是什么意思。假设this.bindingSource绑定是不是现在DataGridView显示的数据。(楼主在BindingNavigator的AddItem方法里‘多余的’增加了this.bindingSource.AddNew()不是吗?),那我只能认为这个this.bindingSource.AddNew()是为了给另一个数据列表增加一个对象(或行)。另外,我也不太明白为什么非要this.bindingSource.ResetBindings();再假设this.bindingSource.DataSource = ds.Tables["Test"]; 那么,为什么不干脆订阅this.bindingSource.AddingNew事件呢?
    (this.bindingSource.AddNew()时会触发)this.bindingSource.AddingNew += new AddingNewEventHandler(bindingSource_AddingNew);private void bindingSource_AddingNew(object sender, AddingNewEventArgs e)
    {
        BindingSource bs = (BindingSource)sender;
        DataView dv = (DataView)bs.List;
        DataRowView drv = dv.AddNew();    dr["Content"] = this.textBox1.Text.Trim();
        dr["Re"] = this.textBox2.Text.Trim();    e.NewObject = drv;}
      

  4.   

    dr["Content"] = this.textBox1.Text.Trim();
    dr["Re"] = this.textBox2.Text.Trim();应该是drv["Content"] = this.textBox1.Text.Trim();
    drv["Re"] = this.textBox2.Text.Trim();
      

  5.   

    to 我的数据表只有一个自动增长的主键.我此时只是把datarow加到了dataset中,还未提交更新到数据库,无法得到唯一的主键,所以用find是不现实的啊.DataView.Find针对的是排序列的值,并不是主键的值。