我的ASP.net页面上有一个下拉列表。它包含另一个表的主键值。它使用这些值放入一个新的交集表。
我的问题是,为了便于阅读/可用性,显示主键本身并不理想。我更喜欢显示相应的名称字段,但插入主键完全相同。我已经尝试更改datatextfield并将值字段保留为pk并选择其中一列或两列,但是当我尝试输入时,它返回说不能接受空值。
有人可以帮忙吗?
<InsertItemTemplate>
<asp:DropDownList ID="DropDownList4" runat="server" DataSourceID="SqlDataSource4" DataTextField="BoatID" DataValueField="BoatID">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:Rowing ClubConnectionString %>" SelectCommand="SELECT [BoatID] FROM [Boat]"></asp:SqlDataSource>
</InsertItemTemplate>
谢谢!
以下是当datatextfield更改为船名并且sql包含船名列时尝试添加到表中时出现的错误页面:
>应用程序中的服务器错误。无法将值NULL插入列'BoatID',表'Rowing Club.dbo.SessionBoats';列不允许空值。 INSERT失败。 声明已经终止。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.SqlClient.SqlException:无法将值NULL插入列'BoatID',表'Rowing Club.dbo.SessionBoats';列不允许空值。 INSERT失败。 声明已经终止。
来源错误:
在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。
堆栈追踪:
[SqlException(0x80131904):无法将值NULL插入列'BoatID',表'Rowing Club.dbo.SessionBoats';列不允许空值。 INSERT失败。
该语句已终止。]
System.Data.SqlClient.SqlConnection.OnError(SqlException异常,Boolean breakConnection,Action 1 wrapCloseInAction) +1767866
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction)+5352418
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)+244
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&amp; dataReady)+1691
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)+269
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async,Int32 timeout,Task&amp; task,Boolean asyncWrite,SqlDataReader ds)+1406
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method,TaskCompletionSource 1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +177
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource
1 completion,String methodName,Boolean sendToPipe,Int32 timeout,Boolean asyncWrite)+205
System.Data.SqlClient.SqlCommand.ExecuteNonQuery()+160
System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand(DbCommand命令,DataSourceOperation操作)+380
System.Web.UI.WebControls.SqlDataSourceView.ExecuteInsert(IDictionary values)+399
System.Web.UI.DataSourceView.Insert(IDictionary values,DataSourceViewOperationCallback回调)+81
System.Web.UI.WebControls.DetailsView.HandleInsert(String commandArg,Boolean causeValidation)+365
System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs e,Boolean causeValidation,String validationGroup)+584
System.Web.UI.WebControls.DetailsView.OnBubbleEvent(Object source,EventArgs e)+89
System.Web.UI.Control.RaiseBubbleEvent(Object source,EventArgs args)+37
System.Web.UI.WebControls.DetailsViewRow.OnBubbleEvent(Object source,EventArgs e)+80
System.Web.UI.Control.RaiseBubbleEvent(Object source,EventArgs args)+37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e)+121
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument)+156
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)+10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)+13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)+9528682
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+1724