Button控件的onclick、oncommand、commandname、CommandArgument的区别

Button控件
Button控件在执行后被解析为<input type="submit">代码,而Button控件的优点就在于提交程序的同时能够传递参数,传递参数是靠CommandName与CommandArgument属性来完成的。
举两个Button控件的例子。
<% @ Page Language="C#" %>
<Script Language="C#" Runat="Server">
public void Button_Click(Object sender,EventArgs e)
{
     string argName = ((Button)sender).CommandName;

    //sender为一个对象,故CommandArgument为string
     string argArg = ((Button)sender).CommandArgument;
     Label1.Text="您选中的动作为:<font color=red>"+argName+"</font>,动作目标是:<font color=red>"+argArg+"</font>";
}
</script>
<html>
<head>
<title></title>
</head>
<body>
<b>Button控件演示</b>
<hr>
<form runat="server">
<asp:Button id="Button1" CommandName="踢" CommandArgument="足球" Text="动作1" runat="server" OnClick="Button_Click" /><br>
<asp:Button id="Button2" CommandName="打" CommandArgument="篮球" Text="动作2" runat="server" OnClick="Button_Click" /><br>
<hr>
<asp:Label id="Label1" runat="server" />
</form>
</body>
</html>
////////////////////////////////////
<% @ Page Language="C#" %>
<Script Language="C#" Runat="Server">
public void Button_Click(Object sender,CommandEventArgs e)
{
     string argName = e.CommandName;

    //CommandEventArgsr为一个类,故CommandArgument.ToString();
     string argArg = e.CommandArgument.ToString();
     Label1.Text="您选中的动作为:<font color=red>"+argName+"</font>,动作目标是:<font color=red>"+argArg+"</font>";
}
</script>
<html>
<head>
<title></title>
</head>
<body>
<b>Button控件演示</b>
<hr>
<form runat="server">
<asp:Button id="Button1" CommandName="踢" CommandArgument="足球" Text="动作1" runat="server" OnCommand="Button_Click" /><br>
<asp:Button id="Button2" CommandName="打" CommandArgument="篮球" Text="动作2" runat="server" OnCommand="Button_Click" /><br>
<hr>
<asp:Label id="Label1" runat="server" />
</form>
</body>
</html>
分析:1.两个程序用不同的方法完成相同的功能和效果。
           2.类CommandEventArgs有两个公共属性,CommandName(用来获取命令的名称)和CommandArgument(用来获取命令的参数)。二者相互关联。
           3.两个程序分别用OnClick与OnCommand激发事件,区别在于OnCommand是带值传递的。
           4.所有Button类的Web控件(如ImageButton,LinkButton)均含有CommandName和CommandArgument这两个属性。

问题:上文中两个程序采用的参数CommandEventArgs,EventArgs有什么区别?为什么在第一个程序中使用EventArgs,而不能使用CommandEventArgs(已经验证,出现“Button_Click”的重载均与委托“System.EventHandler”不匹配)

例子:http://hi.baidu.com/fuhengyu/blog/item/b37e14fb3e6055264e4aea65.html

解决:在网上查资料得到的结果:

这类问题出现的原因就是在控件的一些事件里面调用了函数,而这些函数的参数与该事件所要用到的参数类型不一致。在MSDN中搜索OnPageIndexChanging、OnPageIndexChanged等关键字就可以得到:

C#
protected virtual void OnPageIndexChanged (EventArgs e)

C#
protected virtual void OnPageIndexChanging (DetailsViewPageEventArgs e)

C#
protected virtual void OnRowDeleting (GridViewDeleteEventArgs e)

C#
protected virtual void OnRowDeleted ( DataRowChangeEventArgs e)
这样,在何种事件中使用什么样的参数类型就一目了然了。还有后面的OnRowDeleted、OnRowDeleting也是同样的道理。
相应事件:

public void MyList_Page(object sender, GridViewPageEventArgs e)
public void MyDataGrid_Delete(Object sender, GridViewDeleteEventArgs e)

posted @ 2011-01-26 11:14  TerryChou  阅读(2467)  评论(1编辑  收藏  举报