2008-12-08 62 views

回答

9

我已經結束了與

 For n As Integer = 0 To myGridView.DataKeys.Count - 1 
      If myGridView.DataKeys(n).Value = myKeyObj Then 
       myGridView.SelectedIndex = n 
      End If 
     Next 
2
//grab the current datakeyValue 
int orderID = (int)this.GridView1.SelectedDataKey.Value; 

//do something 
gridView.databind(); 

//set back the selected row int the gridView 
for (int i = 0; i <= this.GridView1.DataKeys.Count - 1; i++) 
{ 
    if ((int)GridView1.DataKeys[i].Value == orderID) 
    { 
     this.GridView1.SelectedIndex = i; 
    } 
} 
5

你有沒有考慮一個LINQ的方法嗎?

用法:

GridView1.SelectedIndex = GridView1.DataKeys.IndexOf(id); 

代碼:如果啓用了分頁

public static class WebControlsEx 
{ 
    public static int IndexOf(this DataKeyArray dataKeyArray, object value) 
    { 
     if (dataKeyArray.Count < 1) throw new InvalidOperationException("DataKeyArray contains no elements."); 
     var keys = dataKeyArray.Cast<DataKey>().ToList(); 
     var key = keys.SingleOrDefault(k => k.Value.Equals(value)); 
     if (key == null) return -1; 
     return keys.IndexOf(key); 
    } 
} 
+1

可以使用觸摸的空白,但這很不錯。 – Kirk 2011-09-15 21:03:09

+0

我同意。感謝您的評論。 :-) – 2011-09-29 12:49:18

3

你只以上方法搜索的GridView的當前頁。要搜索整個GridView,您需要查看其DataSource並使用它來獲取適當的值。

就我而言,我需要給用戶一個快速的方法來搜索特定的客戶,所以我增加了一個支持AJAX的組合框,並OnSelectedIndexChanged,我用這個來找到適當的GridView的行並選擇它:

 Dim i As Integer, DataSetIndex As Integer 
     Dim SelectedRowIndex As Integer 
     Dim dv As DataView = ObjectDataSourceClients.Select 
     Dim dt As DataTable = dv.ToTable 

     For i = 0 To dt.Rows.Count - 1 
      If dt.Rows(i)("Client_ID") = ComboBoxClientSearch.SelectedValue Then 
       DataSetIndex = i 
       Exit For 
      End If 
     Next 

     GridViewAllClients.PageIndex = DataSetIndex \ GridViewAllClients.PageSize 
     SelectedRowIndex = DataSetIndex - (GridViewAllClients.PageSize * GridViewAllClients.PageIndex) 
     GridViewAllClients.SelectedIndex = SelectedRowIndex 

     GridViewAllClients.DataBind() 
1

把這樣的事情在你的GridView_RowDataBound()事件:

Dim p As Catalog.Product = CType(e.Row.DataItem, Catalog.Product) 
If p IsNot Nothing Then 

    If p.Bvin = MySpecificID Then 
     e.Row.RowState = DataControlRowState.Selected 
    End If 

End If 

在這個例子中,我們將GridView結合型Catalog.Product的自定義對象的集合和DataKey名爲Bvin - 您將需要調整數據類型和密鑰名稱取決於你綁定到什麼。

注意這個事件已經每行運行一次,所以沒有必要循環。但是,應該注意防止諸如數據訪問之類的事情多次發生。

2

試試這個方法的Linq:

grdMyGrid.SelectedIndex = grdMyGrid.DataKeys.OfType<DataKey>().ToList<DataKey>().FindIndex(dk => (string)dk.Value == "myKey"); 
3

好,其中大部分是錯誤的。菲爾是唯一能夠工作的人。答案不起作用。 Phil的答案是,它與asp.net中的SQL DataTable綁定,沒有人使用它。那麼有些人會這樣做,但是當你開始使用掉落的設計模式時。

我的示例細節逐行迭代並切換pageindex和rebinding。我無法搜索實際的DataSource屬性,因爲它綁定到LinqDataSource控件,我無法獲取實際的數據。而搜索DataSource可能無法工作,因爲你有搜索,排序等來改變數據並抓取它的實際行索引不會是網格(或其他控件)的索引。

我用一個隱藏的asp:HiddenControl來保存值,因爲,一個jQuery函數實際上執行回發。 grdLocation是網格視圖

grdLocations.SelectedIndex = -1; 

     bool found = false; 
     int index = 0; 
     int pageIndex = 0; 
     for (int i = 0; i < grdLocations.PageCount; i++) 
     { 
      for (index = 0; index < grdLocations.DataKeys.Count; index++) 
      { 
       if (Convert.ToInt32(grdLocations.DataKeys[index].Value.ToString()) == Convert.ToInt32(hidCurrentRigId.Value)) 
       { 
        found = true; 
        break; 
       } 
      } 

      if (found) 
        break; 

      pageIndex++; 
      grdLocations.PageIndex = pageIndex; 
      grdLocations.DataBind(); 
     } 

     if (found) 
     { 
      grdLocations.PageIndex = pageIndex; 
      grdLocations.SelectedIndex = index; 
     } 

這將遍歷網格視圖中的每個頁面並選擇正確的數據鍵。

現在要添加,如果您想要最簡單的方式來查找基於行的頁面,請在此示例控制檯應用程序中使用此數學運算。這使它非常簡單

class Program 
{ 
    static void Main(string[] args) 
    { 
     int rowIndex = 27; 
     int pageCount = 7; 
     int currentPage = 3; 
     int pageSize = 10; 

     Console.WriteLine("Page = " + (rowIndex/pageSize).ToString()); 
     Console.WriteLine("Row = " + (rowIndex % pageSize).ToString()); 
     Console.ReadLine(); 
    } 
} 

希望這可以幫助別人。

4

這個工作,它是很好的和短:

 int MyId = 22; 

     foreach (GridViewRow gvRow in gridview1.Rows) 
     { 
      if ((int)gridview1.DataKeys[gvRow.DataItemIndex].Value == MyId) 
      { 
       gridview1.SelectedIndex = gvRow.DataItemIndex; 
       break; 
      } 
     } 
0

基本上,如果你已經有了GridViewRow實例,那麼這樣做:

gridView.SelectedIndex = gridViewRowToBeSelected.RowIndex; 
相關問題