如何在ASP.NET GridView中基于DataKey设置选定的行?

Lar*_*nal 8 asp.net gridview

我想要类似于以下伪代码的东西:

myGridView.SelectedIndex = myGridView.DataKeys.IndexOf("mySpecificKey");
Run Code Online (Sandbox Code Playgroud)

我做了一些Intellisense探索,但我还没有找到一个明显的方法来做到这一点.如果找不到DataKey,我想将SelectedIndex设置为-1.

Lar*_*nal 9

我结束了

        For n As Integer = 0 To myGridView.DataKeys.Count - 1
            If myGridView.DataKeys(n).Value = myKeyObj Then
                myGridView.SelectedIndex = n
            End If
        Next
Run Code Online (Sandbox Code Playgroud)


Mar*_*ood 5

你考虑过Linq方法吗?

用法:

GridView1.SelectedIndex = GridView1.DataKeys.IndexOf(id);
Run Code Online (Sandbox Code Playgroud)

码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

这很有效,而且很短:

        int MyId = 22;

        foreach (GridViewRow gvRow in gridview1.Rows)
        {
            if ((int)gridview1.DataKeys[gvRow.DataItemIndex].Value == MyId)
            {
                gridview1.SelectedIndex = gvRow.DataItemIndex;
                break;
            }
        }
Run Code Online (Sandbox Code Playgroud)