我有一个用c#编写的winform应用程序。在其中一个表格中,有一个名为' Researcher Name'的组合框。它是使用名为' Researcher Info'的MS Access表中的tableadapters进行数据绑定的。它有两列'研究员名称'和'研究员时代'研究员名称是主键。
当运行创建的exe文件时,在选择此组合框中的任何值时(仅选择,此处没有发生数据库读/写,除了使选项更改事件上运行的按钮可见之外,我没有代码),它抛出下面的例外,说明所选的组合框项目已经存在。有趣的是,我只选择一个值,而不是在db中输入值。
但它在Visual Studio调试模式下工作正常。即:做同样的事情没有例外......
没有太多代码可以显示这个特定的活动,但是这里有:
//在页面加载时,表适配器填充组合框
private void editstaffdetails_Load(object sender, EventArgs e)
{ this.researcher_InfoTableAdapter.Fill(this.research_Log_DatabaseDataSet1.Researcher_Info);
researcher_NameComboBox.SelectedIndex = -1;
Delete_btn.Visible = false;
Update_btn.Visible = false;
}
private void researcher_NameComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
Update_btn.Visible = true;
Delete_btn.Visible = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
这是表适配器的Fill方法的代码,它是默认生成的代码。
this.researcher_InfoTableAdapter.Fill(this.research_Log_DatabaseDataSet1.Researcher_Info);
public virtual int 填充(Research_Log_DatabaseDataSet1.Researcher_InfoDataTable dataTable)
{
this.Adapter.SelectCommand = this.CommandCollection [0];
if ((this.ClearBeforeFill == true)) { dataTable.Clear(); } int returnValue = this.Adapter.Fill(dataTable); return returnValue; }
以下是异常堆栈跟踪:
**************例外文字**************
System.Data.ConstraintException:Column' Researcher Name'是 被限制为独特的。价值' Kwek Gwen'已存在。
在System.Data.UniqueConstraint.CheckConstraint(DataRow行, DataRowAction动作)
在System.Data.DataTable.RaiseRowChanging(DataRowChangeEventArgs args, DataRow eRow,DataRowAction eAction,Boolean fireEvent)
在System.Data.DataTable.SetNewRecordWorker(DataRow行,Int32 proposedRecord,DataRowAction动作,Boolean isInMerge,Int32 position,Boolean fireEvent,Exception& deferredException)
在System.Data.DataTable.SetNewRecord(DataRow行,Int32 proposedRecord, DataRowAction动作,Boolean isInMerge,Boolean fireEvent)
在System.Data.DataRow.SetNewRecord(Int32记录)
在System.Data.DataRow.EndEdit()
在System.Data.DataRowView.EndEdit() 在System.Windows.Forms.CurrencyManager.EndCurrentEdit()
在System.Windows.Forms.CurrencyManager.ChangeRecordState(Int32 newPosition,Boolean validating,Boolean endCurrentEdit,Boolean firePositionChange,Boolean pullData)
在System.Windows.Forms.CurrencyManager.set_Position(Int32 value)
在System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
在System.Windows.Forms.ComboBox.WmReflectCommand(Message& m)
在System.Windows.Forms.ComboBox.WndProc(Message& m)
在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息& m)
在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)
以下是调试输出窗口显示的内容,在组合框单击事件期间启用了所有例外
主题' vshost.LoadReference' (0x15f0)已退出代码0(0x0)。 ' WindowsFormsApplication1.vshost.exe' (管理(v2.0.50727)):已加载' C:\ Users \ jollyk \ documents \ visual studio 2010 \项目\ WindowsFormsApplication1 \ WindowsFormsApplication1 \ BIN \发布\ WindowsFormsApplication1.exe&#39 ;, 符号已加载。 ' WindowsFormsApplication1.vshost.exe' (管理 (v2.0.50727)):已加载 ' C:\ Windows \组件\ GAC_MSIL \辅助\ 2.0.0.0__b03f5f7f11d50a3a \ Accessibility.dll&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 ' Just My Code'已启用。 ' WindowsFormsApplication1.vshost.exe' (管理(v2.0.50727)):已加载 ' C:\ Windows \组件\ GAC_MSIL \ System.Configuration \ 2.0.0.0__b03f5f7f11d50a3a \ System.Configuration.dll&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 ' Just My Code'已启用。 ' WindowsFormsApplication1.vshost.exe' (管理(v2.0.50727)):已加载 ' C:\ Windows \组件\ GAC_32 \ System.Transactions的\ 2.0.0.0__b77a5c561934e089 \ System.Transactions.dll&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 ' Just My Code'已启用。 ' WindowsFormsApplication1.vshost.exe' (管理(v2.0.50727)):已加载 ' C:\ Windows \组件\ GAC_32 \的System.EnterpriseServices \ 2.0.0.0__b03f5f7f11d50a3a \ System.EnterpriseServices.dll&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 ' Just My Code'已启用。 ' WindowsFormsApplication1.vshost.exe' (管理(v2.0.50727)):已加载 ' C:\ Windows \组件\ GAC_32 \的System.EnterpriseServices \ 2.0.0.0__b03f5f7f11d50a3a \ System.EnterpriseServices.Wrapper.dll&#39 ;, 跳过加载符号。模块已优化并具有调试器选项 ' Just My Code'已启用。线程'' (0x1248)退出了 代码为0(0x0)。线程'' (0xd84)已退出代码 0(0x0)。步入:踩过非用户代码 ' System.Windows.Forms.ComboBox.OnSelectedIndexChanged'踏入: 单步执行非用户代码 ' System.Windows.Forms.NativeWindow.DebuggableCallback'踏入: 单步执行非用户代码 ' System.Windows.Forms.Control.ReflectMessageInternal'踏入: 单步执行非用户代码&Systems.Windows.Forms.Control.WmCommand' 步入:踩过非用户代码 ' System.Windows.Forms.Control.WndProc'步入:踩到 非用户代码' System.Windows.Forms.Form.WndProc'步入:踏步 超过非用户代码 ' System.Windows.Forms.NativeWindow.DebuggableCallback'踏入: 单步执行非用户代码 ' System.Windows.Forms.NativeWindow.DefWndProc'步入:踏步 超过非用户代码的System.Windows.Forms.Control.WmCommand'踏入: 单步执行非用户代码&Systems.Windows.Forms.Control.WndProc' 步入:踩过非用户代码 ' System.Windows.Forms.ComboBox.WndProc'步入:踩到 非用户代码' System.Windows.Forms.NativeWindow.DebuggableCallback' 步入:踩过非用户代码 ' System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop'
任何帮助表示感谢。
答案 0 :(得分:1)
我删除了表适配器并创建了一个新适配器,现在它可以工作了。然而,没有设法弄清楚第一个出了什么问题。我完成了表适配器,下次我编写代码。
答案 1 :(得分:0)
查看堆栈跟踪,当您更改Combobox选项时(显然)会导致更改数据集中的行,并且数据绑定正在尝试相应地重新填充Combobox行。那么也许你有一个Combobox的属性设置来重新验证选择的数据,或者数据绑定对象可能在选择改变时重新验证?