将内联更改为后面的代码

时间:2013-12-28 23:35:13

标签: c# asp.net code-behind sqldatasource datalist

我在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,我不知道如何获取列表中每个项目的代码数据。对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您需要使用DataList.ItemDataBound事件来设置Hyperlink的值。在下面的Url中查看有关ItemDataBound的详细信息:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datalist.itemdatabound(v=vs.110).aspx

您的代码如下所示:

  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..
     }

  }