У меня есть ASP.NET GridView
, привязанный к ObjectDataSource
(который привязан к базе данных MySQL). В этой сетке у меня есть 2 несвязанных столбца ButtonField
, которые я хочу инициировать на стороне сервера. Поэтому я добавил метод обработчика событий к событию GridView
RowCommand
.
В коде указанного обработчика событий мне нужно каким-то образом получить базовый DataRow
, на который нажал пользователь. Однако я не могу заставить это работать; если я использую следующий код, переменная selectedRow
всегда равна null
:
protected void searchResultsGridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
CallDataRow selectedRow = (CallDataRow) searchResultsGridView.Rows[Convert.ToInt32(e.CommandArgument)].DataItem;
}
Я погуглил и нашел такие страницы, как http://ranafaisal.wordpress.com/2008/03/31/how-to-get-the-current-row-in-gridview-row-command-событие , но ничего из того, что я нашел, не сработало. Я почти уверен, что просто упускаю что-то очевидное, но я не могу понять, что...
Вот код ASP.NET, если это поможет:
<asp:GridView ID="searchResultsGridView" runat="server" AutoGenerateColumns="False"
DataKeyNames="PersonNo,CallDate"
Width="100%" AllowPaging="True" EnableSortingAndPagingCallbacks="True"
onrowcommand="searchResultsGridView_RowCommand" PageSize="20">
<Columns>
<asp:BoundField DataField="PersonNo" HeaderText="Account number" ReadOnly="True"
SortExpression="PersonNo" />
<asp:BoundField DataField="AgentNo" HeaderText="Agent number"
SortExpression="AgentNo" />
<asp:BoundField DataField="AgentName" HeaderText="Agent name"
SortExpression="AgentName" />
<asp:BoundField DataField="TelNumber" HeaderText="Telephone number"
SortExpression="TelNumber" />
<asp:BoundField DataField="CallDate" HeaderText="Call date/time" ReadOnly="True"
SortExpression="CallDate" />
<asp:ButtonField CommandName="play" HeaderText="Audio" ShowHeader="True"
Text="Play" />
<asp:ButtonField CommandName="download" Text="Download" />
</Columns>
</asp:GridView>