当前位置:编程学习 > C#/ASP.NET >>

gridview 中e.commandargument获取索引问题

//代码:
红色的那行在侦错时提示:输入字符串格式不正确


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int index = Convert.ToInt32(e.CommandArgument);
        string a = ((HyperLink)GridView1.Rows[index].FindControl("hyperlink5")).Text.Trim();
        Session["musicname"] = a;
        switch (e.CommandName)
        {
            case "play":
                Response.Redirect("play.aspx?musicname="+a+"");
                break;
            case "collection":
                if((string)Session["username"]=="")
                {
                    Response.Write("<script language=javascript>alert('请先登陆!')</script>");
                }
                else
                {
                Response.Redirect("play.aspx?username="+(string)Session["username"]+"");
                }
                break;
        }
    }
--------------------编程问答-------------------- <asp:TemplateField>
     <ItemTemplate>
           <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument="1" CommandName="play">LinkButton</asp:LinkButton>
      </ItemTemplate>
</asp:TemplateField>

CommandArgument是与该命令关联的参数,是你自己设置的,如果没有设置,又或者设置为一个非数字型的字符串,就会出错 --------------------编程问答-------------------- ni de CommandArgument 传过来的值不是数字吧 --------------------编程问答-------------------- 其实,你也许并不需要知道当前点击的是第几行,可以用以下方法实现要求:
<ItemTemplate>
      <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%# Eval("field1") %>' CommandName="play" Text='<%# Eval("field2") %>'></asp:LinkButton>
</ItemTemplate>

上面这个LinkButton,Text绑定了字段2, CommandArgument绑定了字段1
那么,
protected   void   GridView1_RowCommand(object   sender,   GridViewCommandEventArgs   e) 

      LinkButton lb = (LinkButton)e.CommandSource;
      string   a   =  lb.Text;//这里可以获得点击行字段field2的值
      string b = e.CommandArgument;//这里可以获得点击行字段field1的值 --------------------编程问答-------------------- 建议以后这种问题尽量先调试一下程序,很容易就会发现问题出在哪里的。 --------------------编程问答-------------------- 加一个toString()方法 --------------------编程问答-------------------- 楼主的问题是GridView中的按钮是模板列,
模板列的CommandEventArgs不设置是为空,即是""

非模板列楼主的代码完全没错!! --------------------编程问答-------------------- e.CommandArgument.tostring(),监视看看是什么东西 --------------------编程问答-------------------- 应该改为:
int index = Convert.ToInt32((string)e.CommandArgument); --------------------编程问答--------------------
引用 4 楼 fei997yang 的回复:
建议以后这种问题尽量先调试一下程序,很容易就会发现问题出在哪里的。

这个方法是正确的,GridView e.commandargument要先输出为String --------------------编程问答-------------------- 在 RowDataBound 事件中指定传过来的参数,

int __Argument = Convert.ToInt32(e.CommandArgument.ToString());

完成~


--------------------编程问答-------------------- 10楼 正解!! --------------------编程问答-------------------- 比如说GridView中有一个Edit字段定义,当你点击Edit或者Update、Cancel等按钮的时候,就会调用GridView1_RowCommand方法并且e.CommandName为"Edit、Update、Cancel"。在GridView自己的预定义功能中,有很多个内置的CommandName(例如Sort、First、Last、Next)。

而你的代码,想当然地以为e.CommandName给你专用了。 --------------------编程问答-------------------- 实际上,即使你不顾及GridView原来有那么多功能都已经有预置的CommandName,也要顾及将来其它程序员需要扩展这个程序,他要定义它使用CommandName的方式。所以你的代码应该在第一行使用if判断,判断这个CommandName是你定义的格式,才处理。而不是你定义的格式的CommandName的时候,不要去做任何事情。 --------------------编程问答-------------------- 如果不得就换试下DataKeysName 吧 设置好DataKeysName绑定的参数字段 

取的时候是Gridview1.DataKeys[ind index].value;
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,