关于ASP.NET中GridView控件中编辑和删除按钮布局问题

ASP.NET中的GridView控件在显示数据方面,使用起来还是比较方便的。如果想在此基础上加入编辑和删除或者修改等操作时为了布局的美观需要改变自动生成的布局。可是并没有相关的属性可以设置自动生成的布局效果,那么这个时候如果想使用自动GridView自动生成的编辑、删除等操作按钮只能使用它自动生成的布局。一般情况下,这些按钮都是数据前面。如何能在使用这些按钮的情况下又能改变布局呢?

解决这个问题有两种方案。

1、GridView的数据源使用SqlDataSource数据源控件或者ObjectDataSource数据源控件

当使用数据源控件时,在配置了GridView的数据源后,在GridView任务下会出现是否启用编辑、是否启用删除、是否启用排序等四个选项,当你选择之后GridView上就会出现相应的操作按钮,这个时候按钮的默认布局是在每行数据的最后面,符合平常开发所做的布局。

2、数据源没有使用数据源控件而是手写代码获取数据,那么GridView控件中的按钮可以通过自己手动编辑来改变布局。

(1)如添加,修改这类操作可以使用超级链接调用其他处理页面来实现。

          在a.aspx页面点击修改通过超级链接调用b.aspx 页面,在b.aspx页面中输入数据提交数据完成修改操作。

(2)如删除、选择等操作可以在使用LinkButton控件,在cs文件中写出事件处理程序实现。

         通过事件操作,需要先在GridView中声明事件,如果是删除操作需要声明事件为:OnRowDeleting="ClassGridView_RowDeleting";,如果是其他事件可以声明为:OnRowCommand="ClassGridView_RowCommand";;除此之外,在GridView中的<ItemTemplate>下的LinkButton中需要设置CommandName=“ " 属性利于在处理程序中对事件进行控制判断。如果操作需要传递参数那么需要在Linkbutton中设置 CommandArgument="<%# ((GridViewRow) Container).RowIndex %> ”属性,以此向后台处理程序传递参数。

3、与(2)相对应的代码片段。

  (1)OnRowCommand类事件


<span style="font-size:14px;">protected void ClassGridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "CheckView")
            {
                int rowId = int.Parse(e.CommandArgument.ToString());
                int id = int.Parse(ClassGridView.DataKeys[rowId].Value.ToString());
                
                SystemColumnDataSet scd = new SystemColumnDataSet();

                scd = SystemColumn.GetSystemColumnClassDataById(id);

                if (scd.DataList.Count == 0)
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "message", "<script language='javascript'>alert('已经无子类别!');</script>");
                }
                else
                {
                    ClassGridView.DataSource = scd.DataList;
                    ClassGridView.DataBind();
                }
                
            }
        }</span>
(2)OnRowDeleting事件

<span style="font-size:14px;">protected void ClassGridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            int id = int.Parse(ClassGridView.DataKeys[e.RowIndex].Value.ToString());
            bool tof = false;
            tof = SystemColumn.DeleteSystemColumnData(id);
            if(tof)
            {
                ClientScript.RegisterStartupScript(this.GetType(), "message", "<script language='javascript'>alert('删除成功!');</script>");
                
            }
            else{
                ClientScript.RegisterStartupScript(this.GetType(), "message", "<script language='javascript'>alert('删除失败!');</script>");
            }
        }</span>



原文地址:https://www.cnblogs.com/wangzl1163/p/6341201.html