2011-11-17 6 views
1

페이징이 활성화 된 gridview 및 문자열 값과 일치하는 열이있는 gridview에서 행을 선택하는 데 사용되는 문자열 값을 입력 할 수있는 텍스트 상자가 있습니다. 열의 데이터는 기본 키가 아니며 데이터 키 이름에 나열되지 않습니다.고유 한 셀 값을 기반으로 페이징 그리드 뷰의 행 선택

비 페이징 gridview에 대한 문제를 해결하는 예제를 발견했습니다. 텍스트 박스와 관련된 버튼을 제어하기위한 이벤트 핸들러 : 바와 같이

protected void SelFrame_Clicked(object sender, EventArgs e) 
    { 
     string requestedFrame = tbSelFrame.Text; 
     if (requestedFrame != "") 
     { 
      int index = (from DataControlField col in gvFrame.Columns 
          where col.HeaderText == "Name" 
          select gvFrame.Columns.IndexOf(col)).FirstOrDefault(); 

      var query = from GridViewRow row in gvFrame.Rows 
         where row.Cells[index].Text == requestedFrame 
         select row; 
      GridViewRow result = query.FirstOrDefault(); 
      if (result != null) 
      { 
       int selectedIndex = result.DataItemIndex; 
       if (selectedIndex > -1) 
        gvFrame.SelectedIndex = selectedIndex; 
      } 
     } 
    } 

, 검색되는 값의 gridview의 보이지 않는 페이지에, 이 줄 널 반환

GridViewRow result = query.FirstOrDefault(); 

페이징을 사용하는 gridview에서 일치하는 행을 어떻게 찾을 수 있습니까? , DataKeyNames = "되는 frameID :

답변

1

당신은 대신 datakey로 값을 추가 한 다음 같은 것을 수행해야합니다

gvFrame.SelectedIndex = gvFrame.Rows.Cast<GridViewRow>().First(r => 
    (string)gvFrame.DataKeys[r.RowIndex]["foo"] == requestedFrame).RowIndex; 
+0

나는이 (가)있는 gridview의 datakeynames 속성을 검색 값에 대한 필드를 추가 한을 귀하의 예제에서 "foo"대신 "FrameName"을 사용하고 "FrameName"을 사용했습니다. 일치하는 행이 현재 페이지에 있으면 잘 작동하지만 다른 페이지에있을 때 런타임 오류가 발생합니다. 시퀀스에 일치하는 요소가 없습니다. 나는 그 오류가 무엇을 의미하는지 정확히 모른다. 나는 당신의 설명에서 뭔가를 놓쳤는가? 시간 내 주셔서 감사합니다. – lynnjwalker

관련 문제