我在aspx页面中有以下代码
<asp:DataList ID="MissionaryDataList" runat="server" DataKeyField="MissionaryID" DataSourceID="MissionaryDataSource" BorderStyle="Solid" BorderWidth="2px" CellPadding="0" CellSpacing="6" GridLines="Vertical" HorizontalAlign="Center" RepeatColumns="2" Width="100%">
<ItemTemplate>
<asp:HyperLink ID="NameHyperLink" style="text-decoration:none" runat="server" NavigateUrl='<%# "~/Missionaries/Missionary.aspx?MissionaryID=" + Eval("MissionaryID") %>' Text='<%# Eval("LastName") + ", " + Eval("FirstName") + (String.IsNullOrWhiteSpace((String)(Eval("SpouseFirstName"))) ? "" : (" & " + Eval("SpouseFirstName"))) %>' ></asp:HyperLink>
<asp:Label ID="ApproveDateLabel" runat="server" Visible="false" Text='<%# Eval("ApproveDate") %>' />
</ItemTemplate>
<SeparatorStyle BorderColor="Black" BorderStyle="Solid" BorderWidth="2px" />
</asp:DataList>
我所关注的那一行是
<asp:HyperLink ID="NameHyperLink" style="text-decoration:none"
runat="server" NavigateUrl='<%# "~/Missionaries/Missionary.aspx?MissionaryID=" +
Eval("MissionaryID") %>' Text='<%# Eval("LastName") + ", " + Eval("FirstName") +
(String.IsNullOrWhiteSpace((String)(Eval("SpouseFirstName"))) ? "" :
(" & " + Eval("SpouseFirstName"))) %>' >
</asp:HyperLink>'
除非“SpouseFirstName”为空,否则该行正常工作。所以我想要做的是将其移至代码后面,以便我可以测试null而不是尝试转换为字符串。我认为代码会更好。无论如何,我不确定如何在这个特定的例子中做到这一点。我知道如何使用代码,但由于我正在处理SqlDataSource,我不知道如何获取列表中每个项目的代码数据。对此的任何帮助将不胜感激。
答案 0 :(得分:0)
您需要使用DataList.ItemDataBound
事件来设置Hyperlink的值。在下面的Url中查看有关ItemDataBound的详细信息:
您的代码如下所示:
void Item_Bound(Object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
// You can check for null here using e.Item.DataItem
Hyperlink NameHyperLink = (HyperLink)e.Item.FindControl("NameHyperLink");
NamedHyperLink.NavigateUrl = //Your code goes here..
}
}