我有一个绑定(bind)到 ObjectDataSource
(绑定(bind)到 MySQL 数据库)的 ASP.NET GridView
。在这个网格上,我有 2 个未绑定(bind)的 ButtonField
列,我想触发服务器端事件。因此,我向 GridView
的 RowCommand
事件添加了一个事件处理程序方法。
在上述事件处理程序的代码中,我需要以某种方式获取用户点击的底层 DataRow
。但是,我似乎无法让它发挥作用;如果我使用如下代码,selectedRow
变量始终为 null
:
protected void searchResultsGridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
CallDataRow selectedRow = (CallDataRow) searchResultsGridView.Rows[Convert.ToInt32(e.CommandArgument)].DataItem;
}
我用 Google 搜索并找到了诸如 http://ranafaisal.wordpress.com/2008/03/31/how-to-get-the-current-row-in-gridview-row-command-event 之类的页面,但我发现没有任何效果。我很确定我只是错过了一些明显的东西,但我不知道是什么......
如果有帮助,这里是 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>
最佳答案
最后通过执行以下操作让它工作:
添加一个包含绑定(bind) HiddenField 的 TemplateField。
<asp:TemplateField ShowHeader="False"> <ItemTemplate> <asp:HiddenField ID="audioFileName" runat="server" Value='<%# Eval("AudioFileName") %>' /> </ItemTemplate> </asp:TemplateField>
在 RowCommand 事件处理程序中添加以下代码:
protected void searchResultsGridView_RowCommand(object sender, GridViewCommandEventArgs e) { string audioFile = ((HiddenField) searchResultsGridView.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("audioFileName")).Value; }
这是一个问题,也不是特别安全,但它可以工作,这就是我现在所需要的。尽管如此,仍然欢迎任何更好的解决方案......
关于c# - 从 ASP.NET GridView 获取数据行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1306990/