2012-06-29 38 views
9

在我的GridView的每一行的超鏈接都應該有一個按鈕/超鏈接導航頁?ID = 東西 還有的JavaScript映入重定向和打印頁面的iframe。 這東西是並已在行中(但隱藏)。 所以我想爲每個字段做一些像NavigateUrl =「〜/ Page.aspx?id =」+ Id.ToString(),但事情是從LINQ數據源在DataBind()中填充Id。如何添加navigateurl在GridView控件

<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(); 

回答

12

您可以使用下面的語法:

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

更多信息herehere MSDN上。

編輯:


如果創建網格時,你不知道確切的網址,你必須做一些更多的工作。 本週我使用itemtemplate工作的一個例子。但爲了使用它,您必須將EnableSortingAndPagingCallbacks設置爲false。爲此,在代碼中做一些額外的工作。 我只在我的網格上使用了分頁,所以我可以提供這個示例。 標記:

<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(row.DataItem, "TicketId"); 
    } 
} 
+0

重新閱讀你的問題後,我認爲你解決了我提出的第一個建議,因爲你的網址總是相同的。只有queryparameter的值是不同的。 – Koen

+0

好的,謝謝,這是我需要的正是這種情況,但您的編輯實際上後續的想法幫助。 – fogedi

5

NavigateUrl屬性

NavigateUrl='<%# Eval("Sl_no", 
       "frmAddIntake.aspx?id=Dashboard&intake_id={0}") %>' 
+0

注單引號 – hanzolo

+0

Rupesh更多解決方案,,爲我工作,但需要到隱藏列第一不是數據綁定從數據源直接綁定,,感謝豬頭.. – Moe

0
<asp:TemplateField HeaderText = "Id" ItemStyle-Width="30"> 
      <ItemTemplate> 
       <asp:HyperLink runat="server" NavigateUrl='<%# Eval("TheQueryStringParameterComingFromDB", "~/PageYouWantTONavigateTo.aspx?Id={0}") %>' 
        Text='GiveTextYouWantToDisplay' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
+1

記得來包裝你的代碼中的代碼塊 – James

0

包括以下這只是對我的作品。沒有其他要求。

<asp:HyperLink ID="HyperLink1" runat="server" 
         Text="URL Text" NavigateUrl='<%# "URL.aspx?your_parameter=" + Eval("ID") %>'></asp:HyperLink>