| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6933 人关注过本帖, 1 人收藏
标题:[求助]关于使用BindingSource的AddNew()方法来新增记录
只看楼主 加入收藏
C_B_Lu
Rank: 1
等 级:新手上路
威 望:1
帖 子:453
专家分:0
注 册:2006-1-10
收藏(1)
 问题点数:0 回复次数:7 
[求助]关于使用BindingSource的AddNew()方法来新增记录

我使用BindingSource的AddNew()方法来新增记录,结果出错.代码如下:
// 工具栏中"保存"按钮的Click Event
private void tsbSave_Click(object sender, EventArgs e)
{
if (this.currentState == interfaceState.AddState)
{
this.bsEmployees.AddNew();
}
this.bsEmployees.EndEdit();
this.sdaEmployees.Update(this.dsHrm.Tables["Employees"]);
this.currentState = interfaceState.BrowseState;
this.controlsState(this.currentState);
}


// 用户在BindingSource上调用AddNew时引发的事件
private void bsEmployees_AddingNew(object sender, AddingNewEventArgs e)
{
Hashtable newRow = new Hashtable();
newRow["E_ID"] = this.tbE_ID.Text.Trim();
newRow["E_Name"] = this.tbE_Name.Text.Trim();
newRow["E_Code"] = this.tbE_Code.Text.Trim();
newRow["E_Gender"] = this.cbE_Gender.SelectedIndex.ToString();
newRow["E_Birthday"] = this.dtpE_Birthday.Value.ToShortDateString();
newRow["E_UID"] = this.tbE_UID.Text.Trim();
newRow["E_FSchool"] = this.tbE_FSchool.Text.Trim();
newRow["E_Speciality"] = this.tbE_Speciality.Text.Trim();
newRow["E_Address"] = this.tbE_Address.Text.Trim();
newRow["E_Guardian"] = this.tbE_Guardian.Text.Trim();
newRow["E_LinkTel"] = this.tbE_LinkTel.Text.Trim();
newRow["E_InFactory"] = this.dtpE_InFactory.Value.ToShortDateString();
e.NewObject = newRow;
}

错误信息:

图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: AddNew 记录 
2006-12-25 23:43
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
你添加的和数据库中的字段类型不一致.

飘过~~
2006-12-26 14:04
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
收藏
得分:0 
楼上说得对!
特别注意你的
newRow["E_ID"] = this.tbE_ID.Text.Trim();
newRow["E_Code"] = this.tbE_Code.Text.Trim();
newRow["E_Gender"] = this.cbE_Gender.SelectedIndex.ToString();
newRow["E_Birthday"] = this.dtpE_Birthday.Value.ToShortDateString();
newRow["E_UID"] = this.tbE_UID.Text.Trim();
newRow["E_FSchool"] = this.tbE_FSchool.Text.Trim();
newRow["E_Speciality"] = this.tbE_Speciality.Text.Trim();
newRow["E_Guardian"] = this.tbE_Guardian.Text.Trim();
newRow["E_InFactory"] = this.dtpE_InFactory.Value.ToShortDateString();

这个值的类型!

2006-12-26 16:31
C_B_Lu
Rank: 1
等 级:新手上路
威 望:1
帖 子:453
专家分:0
注 册:2006-1-10
收藏
得分:0 

关于AddNew()的问题已解决,是AddingNew事件中的的代码有错误,便现在更新后仍有一个问题.无法更新到源数据表中.

代码如下:
// 工具栏中"添加"按钮的Click Event
private void tsbAdd_Click(object sender, EventArgs e)
{
this.currentState = interfaceState.AddState;
this.clearBindingPage(); // 调用自定义方法,清除TabPage页面中各控件与数据的绑定
this.initialTabPage(); // 调用自定义方法,用除初始化TabPage页面中各控件的数据
this.controlsState(this.currentState);
}

// 工具栏中"编辑"按钮的Click Event
private void tsbEdit_Click(object sender, EventArgs e)
{
this.currentState = interfaceState.EditState;
this.controlsState(this.currentState);
}

// 工具栏中"删除"按钮的Click Event
private void tsbDelete_Click(object sender, EventArgs e)
{

}

// 工具栏中"保存"按钮的Click Event
private void tsbSave_Click(object sender, EventArgs e)
{
if (this.currentState == interfaceState.AddState)
{
this.bsEmployees.AddNew();
}
this.bsEmployees.EndEdit();
this.currentState = interfaceState.BrowseState;
this.controlsState(this.currentState);
this.bindingPage(); // 调用自定义方法,用于恢复tabPage上各控件与数据的绑定
}

// 用户在BindingSource上调用AddNew时引发的事件
private void bsEmployees_AddingNew(object sender, AddingNewEventArgs e)
{
BindingSource bs = (BindingSource)sender;
DataView view = (DataView)bs.List;
DataRowView newRow = view.AddNew();
newRow["E_ID"] = this.tbE_ID.Text.Trim();
newRow["E_Name"] = this.tbE_Name.Text.Trim();
newRow["E_Code"] = this.tbE_Code.Text.Trim();
newRow["E_Gender"] = this.cbE_Gender.SelectedIndex.ToString();
newRow["E_Birthday"] = this.dtpE_Birthday.Value.ToShortDateString();
newRow["E_UID"] = this.tbE_UID.Text.Trim();
newRow["E_FSchool"] = this.tbE_FSchool.Text.Trim();
newRow["E_Speciality"] = this.tbE_Speciality.Text.Trim();
newRow["E_Address"] = this.tbE_Address.Text.Trim();
newRow["E_Guardian"] = this.tbE_Guardian.Text.Trim();
newRow["E_LinkTel"] = this.tbE_LinkTel.Text.Trim();
newRow["E_InFactory"] = this.dtpE_InFactory.Value.ToShortDateString();
e.NewObject = newRow;
}


帮助那些真正需要帮助的人,是对帮助你的人最好的回报!
2006-12-26 23:20
casualhewo
Rank: 1
等 级:新手上路
帖 子:267
专家分:0
注 册:2006-6-13
收藏
得分:0 
?更新的语句搞出来看看啊!你可能连接数据库没有搞好!

超越自己,挣脱平凡
2006-12-27 08:27
C_B_Lu
Rank: 1
等 级:新手上路
威 望:1
帖 子:453
专家分:0
注 册:2006-1-10
收藏
得分:0 

TO:5楼.

但是如果我使用"编辑"后再保存,修改后的数据能保存到原数据表中..


帮助那些真正需要帮助的人,是对帮助你的人最好的回报!
2006-12-27 12:50
C_B_Lu
Rank: 1
等 级:新手上路
威 望:1
帖 子:453
专家分:0
注 册:2006-1-10
收藏
得分:0 

问题找了出来了,是因为我的"性别"栏中,在SqlDataAdapter控件中的Select 语句中用到case 性别 = 1 then '男' else '女' end..但我现在要更新的话,该怎么做?


帮助那些真正需要帮助的人,是对帮助你的人最好的回报!
2006-12-28 22:52
liubaoen
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:104
专家分:117
注 册:2006-6-12
收藏
得分:0 
的架构几乎是万能的,我说一种不太符合软件的减少耦合性的方法:
查询不需要将性别转化为字符串的“男”或“女”,直接将性别内部存储的0或者1绑定到cbE_Gender的SelectedIndex上就可以了。
cbE_Gender.Items.AddRange(new string[]{"",""});//默认:1-男,2-女
cbE_Gender.DataBinding.Add("SelectedIndex",bsEmployees,"E_Gander");

如果嫌这种方法太冒险,可以自定义Binding的Format和Parse事件,在Format事件中按照你要显示的格式显示,而在parse事件中按照你要求的格式保存,直接修改e.Value就可以了。
绑定的时候复杂一点,你可以按以下格式设置绑定
程序代码:
Binding bdgE_Gender=new Binding("Text",bsEmployees,"E_Gander");
bdgE_Gender.Format+=new ConvertEventHandler(genderFormat)
bdgE_Gender.Parse+=new ConvertEventHandler(genderParse)
cbE_Gender.DataBinding.Add(bdgE_Gender);

void genderFormat(object sender,ConvertEventArgs e)
{
  if(e.Value==0)
    e.Value="";
  else
    e.Value="";
}

void genderParse(object sender,ConvertEventArgs e)
{
  if(e.Value=="")
    e.Value=0else
    e.Value=1;
}


完全手写的代码,没有地方调试,提供个思路,请勿见笑。
2010-09-18 22:47
快速回复:[求助]关于使用BindingSource的AddNew()方法来新增记录
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.060249 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved