2017-12-20 12 views
0

나는 dropdown과 gridview를 가지고있다. 드롭 다운에서 선택한 값에 따라 Gridview의 첫 번째 열에 지정된 하이퍼 링크에 대해 NaviagetURL을 업데이트하려고합니다. 그래서 하이퍼 링크의 navigateurl을 동적으로 업데이트하기 위해 onRowDataBound 함수를 사용하고 있습니다. 그리고 첫 번째 열 "ID"의 값을 검색하여 OnRowDataBound 함수 내에서 쿼리 문자열로 사용하려고하지만이 작업을 수행 할 수 없습니다.OnRowDataBound 함수에서 특정 열의 값을 가져 오는 방법은 무엇입니까?

첫 번째 열의 하이퍼 링크를 클릭하면 쿼리 문자열에 변수 ID에 할당 된 값이 없습니다. 따라서 URL은 단지 http://localhost/JobCosting/EditSavedTicket.aspx?ID=

으로 변환됩니다. 하이퍼 링크를 클릭 할 때 열리는 URL은 쿼리 문자열의 변수 ID에 지정된 첫 번째 열에 지정된 값을 가져야합니다. e.Row.Cells [1] .Text 또는 e.Row.Cells [2] .Text를 사용하면 열 값이 올바르게 검색되지만 열 0에서 검색되지 않는 값이 필요합니다.

<asp:GridView ID="GridView2" runat="server" AllowSorting="True" 
AutoGenerateColumns="False" DataSourceID="Saved_Work" OnRowDataBound="update_url" 
Style="float: left; font-size: small; position: relative; 
      width: 82%; position: relative; top: -10px; height: 40px; font-size: small; text-align: left; 
      left: 30px;" align="left"> 
      <Columns> 
       <asp:TemplateField HeaderText="ID"> 
        <ItemTemplate> 
         <asp:HyperLink ID="Continue_SavedWork" runat="server" NavigateUrl='<%# Eval("ID", "~/EditSavedJob.aspx?ID={0}") %>' 
          Text='<%# Eval("ID") %>'></asp:HyperLink> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:BoundField DataField="UserID" HeaderText="User" SortExpression="UserID" /> 
       <asp:BoundField DataField="Date_Created" HeaderText="Last_Updated_On" SortExpression="Date_Created" /> 
      </Columns> 
     </asp:GridView> 

코드 뒤에 : 나는 e.Row.Cells [0]는 .text 인 문자열 ID의 길이를 확인하면 제로

의 GridView입니다

protected void update_url(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //string NavigateUrl="<%# Eval('ID', 'EditSavedTicket.aspx?ID={0}) %>"; 
     string id = e.Row.Cells[0].Text; 
     HyperLink hp = (HyperLink)e.Row.FindControl("Continue_SavedWork"); 
     if (SavedWorkDD.SelectedValue.ToString() == "Tickets") 
      hp.NavigateUrl = string.Format("EditSavedTicket.aspx?ID={0}", id); 
    } 
} 
+0

작동하지 않는 기능은 무엇입니까? 무슨 일이야? –

+0

안녕하세요 @MarkMiller, 나는 게시물을 업데이 트했습니다. –

+0

왜 OnRowDataBound 이벤트 처리기가 필요합니까? URL은 이벤트 핸들러를 제거하면 데이터 바인딩에 의해 예상대로 설정됩니다. – Markus

답변

0

첫 번째 열의 텍스트에 액세스 할 수없는 이유는 그것이 템플릿 열이고 다른 열은 BoundField 열이라는 것입니다.

컨트롤에서 텍스트를 가져 오는 대신 OnRowUpdated 이벤트 처리기에서 DataItem에 액세스 할 수 있습니다. 당신이 DataTable에 바인딩하는 경우 예를 들어,이 같은 DataRowView에 액세스 할 수 있습니다

protected void update_url(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
    var row = (DataRowView)e.Row.DataItem; 
    var id = (int)row["ID"]; 
    // ... 
    } 
} 

이 방법은 컨트롤을 찾기 위해 노력하고 그 값에 접근보다 더 의존하고있다. UI를 변경하더라도 계속 작동합니다.

+0

그 작업을 수행했습니다. 정말 고맙습니다 Markus :) –