zoukankan      html  css  js  c++  java
  • gridview的Rowcommand命令中获取行索引的方法总结

    一、通过命令源获取当前行索引。

    方法比较多, GridView 的 Command 事件中无法象 DataGrid 那样直接获取行,

    法1,
     GridViewRow drv = ((GridViewRow)(((Button)(e.CommandSource)).Parent.Parent));//CommandSource 引起事件的命令源,(疑问,根据MSDN说的是GridView,如果这样的话这样操作是错误的,但我得到的确实正确的,那说明得到的是BUtton控件,等待以后查证).
    drv.RowIndex

    --------------------------------------

    二、通过在RowDataBound事件中把行索引绑定到控件的CommandArgument

    由于事件参数 GridViewCommandEventArgs 并不公开Row属性指示当前行,(DataGridCommandEventArgs 公开 Item 属性以获取当然 DataGridItem,不知 ASP.NET Team 是如何考虑这一设计的),因此需要一点“技巧”来获取此属性。

    其实这是一个早就已知的问题,鉴于CSDN里面每每有人疑惑,这里稍微整理下,便于参阅:

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        
    ...{
            
    int rowIndex = -1;
             GridViewRow row
    = null;        
            
    switch (e.CommandName) ...{
                
    case "Command1": // 模板列
                    
    // 对于模板列内的按钮,我们需要显示绑定行索引到按钮的 CommandArgument 属性
                    
    // 以获取触发事件的行信息
                     rowIndex = Convert.ToInt32(e.CommandArgument);
                     row
    = GridView1.Rows[rowIndex];                
                     DisplayInfo(row, e.CommandName);
                    
    // your codes
                    
    //
                    break;
                
    case "Command2": // 模板列
                    
    // 同样处于模板列中,但不采用 Command1 方式,而是通过 NamingContrainer 属性
                    
    // 直接获取当前的 GridViewRow
                     Control cmdControl = e.CommandSource as Control; // 表示触发事件的 IButtonControl,保持统一性并便于后续操作,我们这里直接转化为控件基类 Control
                     row = cmdControl.NamingContainer as GridViewRow;
                     DisplayInfo(row, e.CommandName);
                    
    // your codes
                    
    //
                    break;
                
    case "Command3": // 绑定列
                    
    // 对于 ButtonField 列,数据源控件内部自动以适当的项索引值填充 CommandArgument 属性。
                    
    // 而无需我们显示绑定其 CommandArgument 属性                
                    
    // 注意,我们这里无法采用 Command2 的方式,对于 BUttonField 触发的事件,
                    
    // GridViewCommandEventArgs.CommandSource 表示的包含此按钮的 GridView
                     rowIndex = Convert.ToInt32(e.CommandArgument);
                     row
    = GridView1.Rows[rowIndex];
                     DisplayInfo(row, e.CommandName);
                    
    // your codes
                    
    //
                    break;
             }

         }
  • 相关阅读:
    什么是基于注解的容器配置?
    一个线程运行时发生异常会怎样?
    Java 中你怎样唤醒一个阻塞的线程?
    为什么 wait, notify 和 notifyAll 这些方法不在 thread 类里面?
    Java 中 notify 和 notifyAll 有什么区别?
    在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?
    java 中有几种方法可以实现一个线程?
    什么是AOP?
    什么是竞争条件?你怎样发现和解决竞争?
    Mybatis 是如何进行分页的?分页插件的原理是什么?
  • 原文地址:https://www.cnblogs.com/suncarry/p/1739630.html
Copyright © 2011-2022 走看看