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;
             }

         }
  • 相关阅读:
    16. 3Sum Closest
    17. Letter Combinations of a Phone Number
    20. Valid Parentheses
    77. Combinations
    80. Remove Duplicates from Sorted Array II
    82. Remove Duplicates from Sorted List II
    88. Merge Sorted Array
    257. Binary Tree Paths
    225. Implement Stack using Queues
    113. Path Sum II
  • 原文地址:https://www.cnblogs.com/suncarry/p/1739630.html
Copyright © 2011-2022 走看看