У меня есть a GridView
со связанным DataKey
, который является идентификатором объекта. Как я получаю то значение в RowCommand
событие?
Это, кажется, работает, но мне не нравится бросок к LinkButton
(что, если некоторая другая команда запускает событие?), и я не слишком уверен в NamingContainer
бит.
LinkButton lb = (LinkButton)e.CommandSource;
GridViewRow gvr = (GridViewRow)lb.NamingContainer;
int id = (int)grid.DataKeys[gvr.RowIndex].Value;
Я знаю, что мог вместо этого передать тот идентификатор как CommandArgument
, но я принял решение использовать DataKey
дать мне больше гибкости.
Я также знаю, что возможно использовать скрытое поле для идентификатора, но я полагаю, что взлом, который я не хочу использовать.
Я обычно передаю RowIndex через CommandArgument и использую его для получения нужного мне значения DataKey.
На кнопке:
CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'
На событии сервера
int rowIndex = int.Parse(e.CommandArgument.ToString());
string val = (string)this.grid.DataKeys[rowIndex]["myKey"];