热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GridView的RowCommand事件中取得行索引

前台添加一模版列,里面添加一个Button
前台添加一模版列,里面添加一个Button
<asp:TemplateField HeaderText&#61;"测试">
                                  
<ItemTemplate>
                                      
<asp:Button ID&#61;"Button1" CommandName&#61;"btn" runat&#61;"server" Style&#61;"position: relative" Text&#61;"Button" />
                                  
ItemTemplate>
                              
asp:TemplateField>


后台

protected void gv_Company_RowCommand(object sender, GridViewCommandEventArgs e)
    
{
        
if (e.CommandName &#61;&#61; "btn")
        
{
            
int index &#61; Convert.ToInt32(e.CommandArgument);
            DataKey key 
&#61; this.gv_Company.DataKeys[index];
            
string tt &#61; key.Value.ToString();

            Response.Write(tt);
        }

    }


    
//行数据绑定
    protected void gv_Company_RowDataBound(object sender, GridViewRowEventArgs e)
    
{
        
if (e.Row.RowType &#61;&#61; DataControlRowType.DataRow)
        
{
            Button bt 
&#61; new Button();
            bt 
&#61; (Button)e.Row.Cells[6].FindControl("Button1");
            bt.CommandArgument 
&#61; e.Row.RowIndex.ToString();
        }

    }




ASP.NET2.0中的GRIDVIEW控件真是非常奇怪&#xff0c;不知道MS是怎么考虑的&#xff0c;在GRIDVIEW里&#xff0c;行索引被放在了CommandArgument里面&#xff0c;而不是像DataGrid那样可以利用this.MyDataGrid.DataKeys[e.Item.ItemIndex].ToString()方便的取出主键值&#xff0c;

同时我们注意到&#xff0c;如果使用默认的CommandField&#xff0c;


<asp:CommandField ShowDeleteButton&#61;"True" ShowEditButton&#61;"True" />


则可以在RowCommand中使用如下代码取出行号&#xff1a;


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)

    {

        //编辑按扭

        if (e.CommandName &#61;&#61; "Edit")

        {

            //设置编辑行高亮显示

            this.GridView1.EditRowStyle.BackColor &#61; Color.FromName("#F7CE90");

            //string index&#61; this.GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();

            int index &#61; Convert.ToInt32(e.CommandArgument);

            GridViewRow row &#61; GridView1.Rows[index];

            string xh3 &#61; row.Cells[3].Text;

}

}



但问题是&#xff0c;CommandField的可操控性是很底的&#xff0c;我们一般习惯于使用模版列来订制操作按钮&#xff0c;如下&#xff1a;






                    

                        LinkButton1" runat&#61;"server" CausesValidation&#61;"True" CommandName&#61;"Update"

                            Text&#61;"更新">

                        
                            Text&#61;"取消">

                    


                    

                        LinkButton1" runat&#61;"server" CausesValidation&#61;"False" CommandName&#61;"Edit"

                            Text&#61;"编辑" OnClientClick&#61;"return confirm(&#39;确认要编辑吗&#xff1f;&#39;);">

                        
                            Text&#61;"选择">

                        
                            Text&#61;"删除" OnClientClick&#61;"return confirm(&#39;确认要删除吗&#xff1f;&#39;);">asp:LinkButton>

                    


                


随之而来&#xff0c;问题出现了&#xff0c;运行报错&#xff1a;输入字符串的格式不正确&#xff0c; Convert.ToInt32(e.CommandArgument)中e.CommandArgument转换为字符串为空。当我们把CommandField转换为模版列时&#xff0c;默认的CommandArgument属性丢失了&#xff01;&#xff01;&#xff01;
思考了两天&#xff0c;翻阅了网上的资料&#xff0c;最后在MSDN文档中发现&#xff0c;呈现 GridView 控件之前&#xff0c;必须先为该控件中的每一行创建一个 GridViewRow 对象。在创建 GridView 控件中的每一行时&#xff0c;将引发 RowCreated 事件。这使我们可以提供一个这样的事件处理方法&#xff0c;即每次发生此事件时都执行一个自定义例程&#xff08;如在行中添加自定义内容&#xff0c;当然也可以添加e.CommandArgument属性为模版列里的LinkButton&#xff09;。

GridViewRowEventArgs 对象将被传给事件处理方法&#xff0c;随之我们可以访问正在创建的行的属性。若要访问行中的特定单元格&#xff0c;可以使用 GridViewRowEventArgs 对象的 Cells 属性。使用 RowType 属性可确定正在创建的是哪一种行类型&#xff08;标题行、数据行等等&#xff09;。

好了&#xff0c;原来我们可以利用RowCreated事件来为模版列中LinkButton写入CommandArgument事件。

下面的代码示例演示如何使用 RowCreated 事件将正在创建的行的索引存储在该行中所包含的 LinkButton 控件的 CommandArgument 属性中。这允许您确定在用户单击 LinkButton 控件按钮时包含该控件的行的索引。


/// 

    /// 为模版列LinkButton写入CommandArgument事件

    /// 


    /// 

    /// 

    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)

    {

        if (e.Row.RowType &#61;&#61; DataControlRowType.DataRow)

        {

            // Retrieve the LinkButton control from the first column.

            LinkButton LinkButton1 &#61; (LinkButton)e.Row.FindControl("LinkButton1");

            // Set the LinkButton&#39;s CommandArgument property with the row&#39;s index.

            LinkButton1.CommandArgument &#61; e.Row.RowIndex.ToString();

        }

    }

 
推荐阅读
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
author-avatar
手机用户彡2570437895
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有