积极答复者
GridView 的 RowCommand事件

问题
-
最近一直纠结于RowCommand事件,书上说是响应GridView中的Button 我知道包括模板列的Button,但是!
昨天有个问题困扰至今,就是 有个模板列中的Button "Button1" 其CommandName是我自定义的"borrow"
然后再RowCommand事件中写代码,通过e.CommandName 判断是该命令,然后执行想关操作,但是通过
int index=convert.toInt32(e.CommandArgument)获取不到行索引!后来尝试GridView自己的ButtonField 的Button却可以!
有点晕了,请教一下,我还没懂这个事件!
另外想实现个问题,就是关于上面的Button
GridView最后一列有个Button 是用来续借图书的 点击后,就在该单元显示 续借成功!或者 续借失败! 注:此时Button已经没有了。
答案
-
你好,
你所说的在template模板中的button不行的问题,我已经用下面测试过了,是可以的。你参考下面代码试试。
<%@ Page Language="C#" %> <%@ Import Namespace="System" %> <%@ Import Namespace="System.Configuration" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Linq" %> <%@ Import Namespace="System.Web" %> <%@ Import Namespace="System.Web.Security" %> <%@ Import Namespace="System.Web.UI" %> <%@ Import Namespace="System.Web.UI.HtmlControls" %> <%@ Import Namespace="System.Web.UI.WebControls" %> <%@ Import Namespace="System.Web.UI.WebControls.WebParts" %> <%@ Import Namespace="System.Web.Services" %> <%@ Import Namespace="System.ComponentModel" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> public DataTable GenerateDT { get { if (ViewState["ds"] != null) { return (ViewState["ds"] as DataSet).Tables[0]; } else { DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Test1", typeof(string)); dt.Columns.Add("Test2", typeof(string)); dt.Columns.Add("Test3", typeof(string)); dt.Columns.Add("UserName", typeof(string)); dt.Columns.Add("Password", typeof(string)); dt.Columns.Add("Bool", typeof(System.Boolean)); dt.PrimaryKey = new DataColumn[] { dt.Columns[0] }; DataRow dr1 = dt.NewRow(); dr1[0] = "1"; dr1[1] = "red"; dr1[2] = "test3"; dr1[3] = "test3"; dr1[4] = "Name1"; dr1[5] = ""; dr1[6] = true; dt.Rows.Add(dr1); DataRow dr2 = dt.NewRow(); dr2[0] = "2"; dr2[1] = "blue"; dr2[2] = "test3"; dr2[3] = "test3"; dr2[4] = "Name2"; dr2[5] = "2"; dr2[6] = true; dt.Rows.Add(dr2); DataRow dr3 = dt.NewRow(); dr3[0] = "3"; dr3[1] = "yellow"; dr3[2] = "test3"; dr3[3] = "test3"; dr3[4] = "Name2"; dr3[5] = ""; dr3[6] = true; dt.Rows.Add(dr3); DataSet ds = new DataSet(); ds.Tables.Add(dt); ViewState["ds"] = ds; return dt; } } set { ViewState["ds"] = value; } } protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { this.GridView1.DataSource = this.GenerateDT; this.GridView1.DataBind(); } } protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Test") { this.TextBox1.Text = "test"; } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AllowSorting="True" AllowPaging="True" PageSize="3" AutoGenerateSelectButton="True" ShowFooter="True" OnRowCommand="GridView1_RowCommand"> <Columns> <asp:CommandField ShowEditButton="True" /> <asp:TemplateField HeaderText="Index"> <ItemTemplate> <%#((GridViewRow)(Container)).RowIndex %> </ItemTemplate> </asp:TemplateField> <asp:TemplateField ShowHeader="False"> <ItemTemplate> <asp:Button ID="Button1" runat="server" CausesValidation="false" CommandName="Test" Text="Button" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <ItemTemplate> <asp:Button ID="Button3" runat="server" Text="Button" /> </ItemTemplate> </asp:TemplateField> </Columns> <SelectedRowStyle BackColor="LightCyan" ForeColor="DarkBlue" Font-Bold="true" /> </asp:GridView> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> </div> </form> </body> </html>
Microsoft Online Community Support- 已标记为答案 柠檬布丁 2009年12月8日 2:16
全部回复
-
-
-
你好,
你所说的在template模板中的button不行的问题,我已经用下面测试过了,是可以的。你参考下面代码试试。
<%@ Page Language="C#" %> <%@ Import Namespace="System" %> <%@ Import Namespace="System.Configuration" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Linq" %> <%@ Import Namespace="System.Web" %> <%@ Import Namespace="System.Web.Security" %> <%@ Import Namespace="System.Web.UI" %> <%@ Import Namespace="System.Web.UI.HtmlControls" %> <%@ Import Namespace="System.Web.UI.WebControls" %> <%@ Import Namespace="System.Web.UI.WebControls.WebParts" %> <%@ Import Namespace="System.Web.Services" %> <%@ Import Namespace="System.ComponentModel" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> public DataTable GenerateDT { get { if (ViewState["ds"] != null) { return (ViewState["ds"] as DataSet).Tables[0]; } else { DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Test1", typeof(string)); dt.Columns.Add("Test2", typeof(string)); dt.Columns.Add("Test3", typeof(string)); dt.Columns.Add("UserName", typeof(string)); dt.Columns.Add("Password", typeof(string)); dt.Columns.Add("Bool", typeof(System.Boolean)); dt.PrimaryKey = new DataColumn[] { dt.Columns[0] }; DataRow dr1 = dt.NewRow(); dr1[0] = "1"; dr1[1] = "red"; dr1[2] = "test3"; dr1[3] = "test3"; dr1[4] = "Name1"; dr1[5] = ""; dr1[6] = true; dt.Rows.Add(dr1); DataRow dr2 = dt.NewRow(); dr2[0] = "2"; dr2[1] = "blue"; dr2[2] = "test3"; dr2[3] = "test3"; dr2[4] = "Name2"; dr2[5] = "2"; dr2[6] = true; dt.Rows.Add(dr2); DataRow dr3 = dt.NewRow(); dr3[0] = "3"; dr3[1] = "yellow"; dr3[2] = "test3"; dr3[3] = "test3"; dr3[4] = "Name2"; dr3[5] = ""; dr3[6] = true; dt.Rows.Add(dr3); DataSet ds = new DataSet(); ds.Tables.Add(dt); ViewState["ds"] = ds; return dt; } } set { ViewState["ds"] = value; } } protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { this.GridView1.DataSource = this.GenerateDT; this.GridView1.DataBind(); } } protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Test") { this.TextBox1.Text = "test"; } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AllowSorting="True" AllowPaging="True" PageSize="3" AutoGenerateSelectButton="True" ShowFooter="True" OnRowCommand="GridView1_RowCommand"> <Columns> <asp:CommandField ShowEditButton="True" /> <asp:TemplateField HeaderText="Index"> <ItemTemplate> <%#((GridViewRow)(Container)).RowIndex %> </ItemTemplate> </asp:TemplateField> <asp:TemplateField ShowHeader="False"> <ItemTemplate> <asp:Button ID="Button1" runat="server" CausesValidation="false" CommandName="Test" Text="Button" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <ItemTemplate> <asp:Button ID="Button3" runat="server" Text="Button" /> </ItemTemplate> </asp:TemplateField> </Columns> <SelectedRowStyle BackColor="LightCyan" ForeColor="DarkBlue" Font-Bold="true" /> </asp:GridView> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> </div> </form> </body> </html>
Microsoft Online Community Support- 已标记为答案 柠檬布丁 2009年12月8日 2:16
-