【发布时间】:2014-12-01 21:21:28
【问题描述】:
SELECT
CAST ([content_html] AS XML).query('/root/Physicians/specialty/a') AS [Specialty1]
, CAST ([content_html] AS XML).query('/root/Physicians/specialty2/a') AS [Specialty2]
, CAST ([content_html] AS XML).query('/root/Physicians/specialty3/a') AS [Specialty3]
, CAST ([content_html] AS XML).query('/root/Physicians/specialty4/a') AS [Specialty4]
, CAST ([content_html] AS XML).query('/root/Physicians/specialty5/a') AS [Specialty5]
, CAST ([content_html] AS XML).query('/root/Physicians/specialty6/a') AS [Specialty6]
FROM
[db].[dbo].[content]
WHERE
[folder_id] = '188'
AND
(content_status = 'A')
ORDER BY
[content_title]
ASP.net 中继器(部分):
<asp:Label ID="lblSpec1" runat="server"><%# Eval("Specialty1").ToString() + DisplayMultipleValues(Eval("Specialty2").ToString()) + DisplayMultipleValues(Eval("Specialty3").ToString()) + DisplayMultipleValues(Eval("Specialty4").ToString()) + DisplayMultipleValues(Eval("Specialty5").ToString()) + DisplayMultipleValues(Eval("Specialty6").ToString()) %></asp:Label>
C#(处理多个条目并添加, 的代码):
public string DisplayMultipleValues(string strValue)
{
return (NonBlankValueOf(strValue));
}
public string NonBlankValueOf(string source)
{
return (string.IsNullOrEmpty(source)) ? "" : ", " + source;
}
当我在 SQL 中运行查询时,它工作正常(如果该列没有值,则它是一个空单元格)但通过后面的代码运行它,给我以下错误:
Server Error in '/' Application.
DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'Specialty3'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'Specialty3'.
Source Error:
Line 96: </div>
Line 97: <div class="optionRight">
Line 98: <asp:Label ID="lblSpec1" runat="server"><%# Eval("Specialty1").ToString() + DisplayMultipleValues(Eval("Specialty2").ToString()) + DisplayMultipleValues(Eval("Specialty3").ToString()) + DisplayMultipleValues(Eval("Specialty4").ToString()) + DisplayMultipleValues(Eval("Specialty5").ToString()) + DisplayMultipleValues(Eval("Specialty6").ToString()) %></asp:Label>
Line 99: </div>
Line 100: </div>
Source File: c:\er.aspx Line: 98
Stack Trace:
[HttpException (0x80004005): DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'Specialty3'.]
System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName) +12523742
System.Web.UI.DataBinder.Eval(Object container, String[] expressionParts) +142
ASP.find_provider_aspx.__DataBind__control22(Object sender, EventArgs e) in c:\er.aspx:98
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +304
System.Web.UI.Control.DataBindChildren() +12746711
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +321
System.Web.UI.Control.DataBindChildren() +12746711
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +321
System.Web.UI.WebControls.Repeater.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem) +183
System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) +659
System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) +164
find_provider.Search() in c:\er.aspx.cs:294
find_provider.Page_Load(Object sender, EventArgs e) in c:\er.aspx.cs:37
System.Web.UI.Control.LoadRecursive() +71
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178
最好的解决方法是什么?
我尝试了以下方法:
<asp:Label ID="lblspec1" runat="server"><%# If(Eval("Specialty1").ToString() Is DBNull.Value, "", Eval("Specialty1").ToString()) + If(Eval("Specialty2").ToString() Is DBNull.Value, "", DisplayOffices(Eval("Specialty2").ToString())) + If(Eval("Specialty3").ToString() Is DBNull.Value, "", DisplayOffices(Eval("Specialty3").ToString())) + If(Eval("Specialty4").ToString() Is DBNull.Value, "", DisplayOffices(Eval("Specialty4").ToString())) + If(Eval("Specialty5").ToString() Is DBNull.Value, "", DisplayOffices(Eval("Specialty5").ToString())) + If(Eval("Specialty6").ToString() Is DBNull.Value, "", DisplayOffices(Eval("Specialty6").ToString())) %></asp:Label>
【问题讨论】:
-
if (DBNull.Value == strValue)
-
您能详细说明一下吗?
-
如果 Eval("Specialty1") 为空,那么调用 ToString 可能会出现问题。尝试像 Eval("Specialty1") != null 之类的东西? Eval("Specialty").ToString() : ""
-
剩下的呢?我正在使用
+将它们全部添加以制作一个完整的列表。 -
Eval("Specialty1").ToString() == DBNull.Value) ? "" : Eval("Specialty1").ToString() + Eval("Specialty2").ToString() == DBNull.Value) ? "" : DisplayOffices(Eval("Specialty2").ToString()) + Eval("Specialty3").ToString() == DBNull.Value) ? "" : DisplayOffices(Eval("Specialty3").ToString()) + Eval("Specialty4").ToString() == DBNull.Value) ? "" : DisplayOffices(Eval("Specialty4").ToString()) + Eval("Specialty5").ToString() == DBNull.Value) ? "" : DisplayOffices(Eval("Specialty5").ToString()) + Eval("Specialty6").ToString() == DBNull.Value) ? "" : DisplayOffices(Eval("Specialty6").ToString())
标签: c# asp.net sql-server