遇到一个很怪的问题.我只是放置了一个Bindingsource及有类型的DataSet到窗体中,然后用数据适配器填入数据到表,BindingSource绑定DataSet中的一个表.窗体上没有任何控件.当我改变BindingSource.Position的属性时,发现BindinSource总会自动调用BeginEdit();因为我检测到((DataRowView)MyPars.BindingSource.Current).IsEdit==true,但BindingSource这个特性使我很烦恼.因为BeginEdit后,根据上面的IsEdit属性,我就当此项记录已经编辑过,并询问用户是否要保存...BindingSource自动BeginEdit使我这个判断工作很不好处理,如何是好?
楼主用(datatable.getchange()!=null)来判断是否发生变化(Datatable初始化完务必datatable.acceptchange()一次!!)
用户在数据行中浏览了一记录后按"next"跳到另一个记录中,而此时用户很可能无意中编辑过了.所以按"NEXT"按钮时,如果记录已经编辑过(因为此时用户未按"Post"按钮,是没有调用过EndEdit),则要询问一下用户是否要提交记录?这是一个可编辑数据的环境,但上面的做法是为了避免用户误编辑记录又不知道~~~觉得ADO时,做这个很好做呀~~
{
//数据源
dt.TableName = "XXX";
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("Menu_name", typeof(string));
dt.Columns.Add("ParentID", typeof(int));
dt.Rows.Add(1, "菜单", 0);
dt.Rows.Add(3, "重庆", 1);
dt.Rows.Add(4, "天津", 1);
dt.Rows.Add(5, "陕西省", 1);
dt.Rows.Add(8, "西安市", 5);
dt.Rows.Add(9, "广州市", 6);
dt.Rows.Add(10, "扶风", 8);
dt.Rows.Add(11, "深圳", 6);
dt.Rows.Add(12, "广东省", 1);
dt.Rows.Add(13, "AAA", 10);
dt.Rows.Add(14, "AAA", 5);
dt.AcceptChanges();
bs.DataSource = dt;
txtID.DataBindings.Add("Text", bs, "id");
bs.PositionChanged += new EventHandler(bs_PositionChanged);
} void bs_PositionChanged(object sender, EventArgs e)
{
bs.EndEdit();
if (dt.GetChanges() != null)
{
if (MessageBox.Show("是否保存", "提示", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
dt.RejectChanges();
else
dt.AcceptChanges();
}
}
如果还不行,PM我~
if (r.HasVersion(DataRowVersion.Proposed))
{
//此记录编辑过或在新增状态,新增状态时所有r[Datacolumn, DataRowVersion.Proposed]的值为Null.
}