2011-11-17 14 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

相关问题