c# - 从 ASP.NET GridView 获取数据行

标签 c# asp.net gridview event-handling datarow

我有一个绑定(bind)到 ObjectDataSource(绑定(bind)到 MySQL 数据库)的 ASP.NET GridView。在这个网格上,我有 2 个未绑定(bind)的 ButtonField 列,我想触发服务器端事件。因此,我向 GridViewRowCommand 事件添加了一个事件处理程序方法。

在上述事件处理程序的代码中,我需要以某种方式获取用户点击的底层 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>

最佳答案

最后通过执行以下操作让它工作:

  1. 添加一个包含绑定(bind) HiddenField 的 TemplateField。

    <asp:TemplateField ShowHeader="False">
      <ItemTemplate>
        <asp:HiddenField ID="audioFileName" runat="server" Value='<%# Eval("AudioFileName") %>' />
      </ItemTemplate>
    </asp:TemplateField>
    
  2. 在 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/

相关文章:

c# - 跨平台应用程序中的 BinaryFormatter

asp.net - 我的 ASP.NET 缓存存储在服务器还是浏览器上

asp.net - 从 VS 2013 禁用 System.Net.Trace 日志记录

android - 如何获取自定义网格子项点击事件?

asp.net - 有什么方法可以使用 AutoGenerateColumns = true 来操作 GridView 中的列?

java - 弹出窗口中的Android GridLayout不显示数据

c# - 为 C++ DLL 实现回调 C# 函数

窗口之间的 C# 数据丢失

c# - 使用选择参数动态更改 JOIN 的结果

c# - 使用 SqlCommand 从多个表中删除