日期:2014-05-18  浏览次数:21027 次

BindingSource增加行,怎麼將記錄移動到新增的行上面
我有2個TextBox使用BindingSource进行了绑定,现在要新增一行,先有一个按钮清空2个TextBox的值,然后输入新的内容后点新增,新增是增加了,但新增前记录所在的那一行也变成了和新增的行一样的内容.
因为清空按钮只是清空了值,记录的位置还是没有变,所以新增时会新增一行,同时原记录也会修改成新增的行的内容,但怎么新增时让当前记录移到新的行呢?

想了2天了,晚上都没睡好,一直没有解决,谢谢大家

以下是代码

C# code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace PMMIS.TEST
{
    public partial class frmLx : Form
    {
        public frmLx()
        {
            InitializeComponent();
        }

        SqlConnection cn;
        BindingSource bs;
        private void frmLx_Load(object sender, EventArgs e)
        {
            cn = new SqlConnection("server=10.0.0.1;database=kerno;uid=sa;pwd=sa");
            cn.Open();
            SqlDataAdapter da = new SqlDataAdapter("select 組編號,組名稱 from grou", cn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            bs = new BindingSource();
            bs.DataSource = ds.Tables[0];
            txtId.DataBindings.Add("text", bs, "組編號");
            txtName.DataBindings.Add("text", bs, "組名稱");
            bs.AddingNew += new AddingNewEventHandler(bs_AddingNew); //注册委托方法
        }

        void bs_AddingNew(object sender, AddingNewEventArgs e)
        {
            BindingSource bstemp = (BindingSource)sender;
            DataView view = (DataView)bstemp.List;
            DataRowView row = view.AddNew();
            row["組編號"] = txtId.Text;
            row["組名稱"] = txtName.Text;
            e.NewObject = row;
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            bs.AddNew(); //自动触发上面的bs_AddingNew委托方法
        }

        //清空文本框内容
        private void btnClear_Click(object sender, EventArgs e)
        {
            txtId.Text = "";
            txtName.Text = "";
        }
    }
}




------解决方案--------------------
BindingSource bstemp = (BindingSource)sender;
bstemp.AddNew();
DataRowView row = bstemp.Current as DataRowView;

//DataView view = (DataView)bstemp.List;
//DataRowView row = view.AddNew();
row["組編號"] = txtId.Text;
row["組名稱"] = txtName.Text;
e.NewObject = row;

对BindingSource处理,不对DataVIew处理。