2011-05-10 2 views
0

검색 한 결과 아직 해결책을 찾지 못했습니다.Gridview의 하이퍼 링크가 1 행만큼 잘못된 행에 바인딩되었습니다.

DropdownList에 의해 호출되는 저장 프로 시저에 의해 채워진 Gridview가 있습니다. 쿼리가 제대로 작동하고 값이있는 테이블을 제공합니다. 첫 번째 열에 텍스트를 프로그래밍하여 하이퍼 링크로 변환 된 것을 볼 수 있습니다.

첫 번째 행 (헤더 행이 아님)에 링크가 없다는 점을 제외하면 모든 것이 잘 작동합니다. 사실 하이퍼 링크 주소는 대신 다음 행에 적용됩니다. 그래서 나머지 링크는 한 줄 아래로 튀어 나옵니다.

디버깅 할 때 첫 번째 하이퍼 링크로 간주되는 셀이 null ("") 값으로 표시되는 것으로 나타났습니다. IntelliSense에서 트래버스하면 행에 올바른 속성이 표시됩니다 (DataItem> Row> ItemArray에 텍스트 값이 있음).

클라이언트 측

<asp:TableCell> 
    <asp:Label ID="ddlLabel" runat="server" Text="Choose a Group Folder: " /> 
    <asp:DropDownList ID="ddlFolders" runat="server" AutoPostBack="true" 
     OnSelectedIndexChanged="ddlFolders_SelectedIndexChanged"> 
    </asp:DropDownList> 
</asp:TableCell> 

    <asp:TableCell ColumnSpan="2"> 
     <asp:GridView ID="gvReportList" runat="server" AutoGenerateColumns="false" 
       CellPadding="5" OnRowDataBound="gvReportList_RowDataBound" Width="98%"> 
      <Columns> 
       <asp:HyperLinkField HeaderText="Name" DataTextField="Name" Target="_blank" /> 
       <asp:BoundField HeaderText="Description" DataField="Description" /> 
      </Columns> 
     </asp:GridView> 
    </asp:TableCell> 

서버 사이드 C#을

// hyperlink binding by row for first column in gridview 
protected void gvReportList_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //Changes text in the first column into HyperLinks 
    HyperLinkField nameLink = gvReportList.Columns[0] as HyperLinkField; 

    string linkPath = "http://inserted-address-here"; 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
      //applies a unique suffix to the address depending on the link name 
      HyperLink nameHl = (HyperLink)e.Row.Cells[0].Controls[0]; 
      string nameText = nameHl.Text; 
      string linkSuffix = nameText.Replace(" ", "+"); 
      nameLink.NavigateUrl = linkPath + linkSuffix; 
    } 
} 

나는 단지 그것을 내가있는 gridview에 하이퍼 링크를 결합하고있어 순서 함께 할 수있는 뭔가가 가정 할 수 있습니다. 또는 거기에 데이터가 있어도 첫 번째 행이 null 값으로 나타날 때와 관련이 있습니다.

+1

nameLink는 현재 열의 특정 열이 아닌 전체 열을 나타낼 수 있습니까? 즉, nameLink.NavigateUrl이 nameHl.NavigateUrl이되어서는 안됩니까? – n8wrl

+0

변경된 것이 트릭이었습니다. 나는 그것이 그렇게 간단했기 때문에 기쁘다! 정말 고마워. – silentdrkangel

+0

도와 드리겠습니다. 또한 공백을 + 오른쪽으로 대체하여 줄 바꿈을 억제하려고하는 것처럼 보입니까? NoWrap을 사용하여 열의 스타일을 지정하는 것이 좋습니다. – n8wrl

답변

0
string linkSuffix = Datainder.Eval(e.DataItem, "Name").ToString().Replace(" ", "+"); 
nameLink.NavigateUrl = linkPath + linkSuffix; 
관련 문제