2011-11-17 63 views
1

我有一個啓用了調頁的gridview和一個文本框,用戶可以在其中輸入一個字符串值,用於選擇gridview中與該字符串值匹配的列的行。該列的數據不是主鍵,並未列在datakeynames中。基於唯一單元格值在頁面調度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的不可見的網頁上,此行返回null:

GridViewRow result = query.FirstOrDefault(); 

如何在啓用分頁的gridview中找到匹配的行?

回答

1

您應該添加值作爲datakey代替,然後做這樣的事情:

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

我已經添加了字段搜索值到GridView的DataKeyNames屬性:的DataKeyNames =「FrameId, FrameName「,在你的例子中用」FrameName「代替」foo「。這工作正常,如果匹配的行在當前頁面中,但是當它在另一個頁面中時,我會得到運行時錯誤:Sequence包含沒有匹配的元素。我不確切知道錯誤是指什麼。我在你的解釋中遺漏了什麼?感謝您的時間。 – lynnjwalker

相關問題