Asp.net

如何在gridview中將navigationurl添加到超連結

  • November 21, 2019

我的 gridview 中的每一行都應該有一個按鈕/超連結導航到 Page?id= something 然後有 javascript 可以擷取重定向並將頁面列印為 iframe。這東西在行中已經可用(但被隱藏了)。所以我想為每個欄位做類似 NavigateUrl = “~/Page.aspx?id=” + Id.ToString() 的事情,但問題是 Id 是從 LINQ 數據源填充到 DataBind() 中的。

<asp:GridView ID="gridleitNidurstada" runat="server" GridLines="None" AllowPaging="True"
   CssClass="mGrid" PagerStyle-CssClass="pgr" DataKeyNames="Id" OnRowDataBound="gridLeit_RowDataBound"
   AllowSorting="True" SortedAscendingHeaderStyle-CssClass="sortasc-header" SortedDescendingHeaderStyle-CssClass="sortdesc-header"
   OnSorting="gridleitNidurstada_Sorting" CurrentSortField="Id" CurrentSortDir="Ascending"
   AutoGenerateColumns="False">
   <Columns>
       <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" Visible="false"/>
           </ItemTemplate>
       </asp:TemplateField>
       <asp:HyperLinkField HeaderText="Print" Text="Print" **anything here?**/>
   </Columns>
   <PagerStyle CssClass="pgr"></PagerStyle>
   <SortedAscendingHeaderStyle CssClass="sortasc-header"></SortedAscendingHeaderStyle>
   <SortedDescendingHeaderStyle CssClass="sortdesc-header"></SortedDescendingHeaderStyle>
</asp:GridView>

綁定是這樣的:我可以在那裡做嗎?還是在 rowbound 事件中?

IQueryable<model.SomeClass> someClass = 
   from m in preparePredicate()
   select new model.SomeClass
   {
       Id = m.id,
       ...
   };
       gridleitNidurstada.DataSource = someClass;
       gridleitNidurstada.DataBind();

您可以使用以下語法:

<asp:HyperLinkField DataNavigateUrlFields="col1,col2" DataNavigateUrlFormatString="gotopage.aspx?p1={0}&p2={1}" Text="Print">

更多資訊herehere on MSDN。

編輯:


如果您在創建網格時不知道確切的 url,則需要做更多的工作。本週我使用 itemtemplate 處理的一個範例。但為了使用它,您必須設置EnableSortingAndPagingCallbacksfalse. 並為此在後面的程式碼中做一些額外的工作。我只在我的網格上使用了分頁,所以我可以提供這個範例。標記:

<asp:GridView ID="gridViewTicketsClosed" runat="server" CellPadding="4" ForeColor="#333333"
   GridLines="None" EnableSortingAndPagingCallbacks="False" AutoGenerateColumns="False"
   AllowPaging="True" OnRowDataBound="gridViewTicketsClosed_RowDataBound" OnPageIndexChanging="GridViewPageIndexChanging">
   <PagerSettings Mode="NextPrevious" NextPageText="Next" PreviousPageText="Previous" />
   <Columns>
       <asp:BoundField DataField="TicketId" HeaderText="Nr.">
           <ItemStyle Width="20px" />
       </asp:BoundField>
       <asp:BoundField DataField="DateStarted" DataFormatString="{0:dd/MM/yyyy HH:mm}" HeaderText="Date">
           <ItemStyle Width="100px" />
       </asp:BoundField>
       <asp:BoundField DataField="President" HeaderText="President">
           <ItemStyle Width="100px" />
       </asp:BoundField>
       <asp:BoundField DataField="TicketTypeId" HeaderText="TicketType"></asp:BoundField>
       <asp:TemplateField>
           <ItemTemplate>
               <asp:HyperLink ID="lnkActionLog" runat="server" Text="Log"></asp:HyperLink>
           </ItemTemplate>
       </asp:TemplateField>
   </Columns>
</asp:GridView>

後面的程式碼:

protected void gridViewTicketsClosed_RowDataBound(object sender, GridViewRowEventArgs e)
{
   if (e.Row.RowType == DataControlRowType.DataRow)
   {
       var hyperLink = e.Row.FindControl("lnkActionLog") as HyperLink;
       if (hyperLink != null)
           hyperLink.NavigateUrl = CreateShowActionLogUrl(e.Row) + "?id="+ DataBinder.Eval(e.Row.DataItem, "TicketId");
   }
}

引用自:https://stackoverflow.com/questions/11263879