Если вы можете быть уверены, что порядок элементов в вашем источнике данных не изменился, вы можете использовать свойство CommandArgument для CommandEventArgs.
Более надежный метод, однако, заключается в использовании свойств DataKeys/SelectedDataKey GridView. Единственное предостережение в том, что ваша команда должна иметь тип «Выбрать» (поэтому по умолчанию у RowCommand не будет доступа к DataKey).
Предполагая, что у вас есть уникальность в сущностях, входящих в ваш список, вы можете установить одно или несколько имен свойств ключа в свойстве DataKeys GridView. Когда выбранный элемент в GridView установлен, вы можете получить свои ключевые значения и найти элемент в сводном списке. Этот метод избавляет вас от проблемы наличия порядкового положения в GridView, не соответствующего порядковой позиции вашего элемента в источнике данных.
Пример:
<asp:GridView ID="GridView1" runat="server" AutoGenerateSelectButton="True"
DataKeyNames="Name" onrowcommand="GridView1_RowCommand1"
onselectedindexchanged="GridView1_SelectedIndexChanged">
</asp:GridView>
Затем код-за (или рядный) для страницы будет что-то вроде:
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
// Value is the Name property of the selected row's bound object.
string foo = GridView1.SelectedDataKey.Value as string;
}
Другой выбор должен был бы идти спелеология в коллекции Rows из GridView, получая значения столбца за раз, получая контрольные значения, но это не рекомендуется, если только вам не нужно.
Надеюсь, это поможет.