В предыдущем учебном эссе мы могли использовать DataKeyNames и DataKeys для доступа к данным в столбце первичного ключа GridView. В последующих экспериментах я обнаружил, что мы можем использовать TemplateField для доступа к другим данным
.
<Шаблон элемента>
<asp:Literal id="litUserName" runat="Server" Text='<%#Eval("UserName")%>'/>
</ItemTemplate>
</asp:TemplateField>
//Реализация серверной части
String userName = ((Literal)GridView1.SelectedRow.FindControl("litUserName")).Text;
Свойство AutoGenerateSelectButton GridView может напрямую включать выбор таблицы. Если мы не хотим добавлять дополнительный столбец для выбора, мы можем использовать TemplateField для реализации выбора GridView.
Код ASP.NET выглядит следующим образом:
<asp:BoundField DataField="ObjectID". " HeaderText="ID"/>
<asp:TemplateField>
<Шаблон заголовка>
Имя
</HeaderTemplate>
<Шаблон элемента>
<asp:LinkButton id="lbName" runat="Server" CommandName="Select">
<%#Eval("Имя")%>
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Status" HeaderText="Status"/>
При этом нам нужно добавить в GridView два обработчика событий: RowCreated и RowCommand.
//Обработка события RowCreated
void GridView1_RowCreated (отправитель объекта, GridViewRowEventArgs e)
{
если (e.Row.RowType == DataControlRowType.DataRow)
{ ((LinkButton)e.Row.FindControl("lbName")).CommandArgument = e.Row.RowIndex.ToString();
}
}
//Обработка события RowCommand
void GridView1_RowCommand (источник объекта, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
GridView1.SelectedIndex = int.Parse(e.CommandArgument.ToString());
}
Таким образом, вы можете выбирать одновременно с щелчком по имени, не используя столбец выбора.