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); --------------------编程问答--------------------
这个方法是正确的,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