asp.net根据条件动态生成GridView,并动态绑定列,且可对其进行编辑的实现

简介: 根据用户需要,一个页面中,有几个不同的button,点击不同的button,可在下方同一区域产生gridview,(当然他们的gridview是不同的)。之前用MultiView来控制,用了几个view在html中绑定了几个Gridview,然后根据点击的按钮不同,切换不同的view。

 根据用户需要,一个页面中,有几个不同的button,点击不同的button,可在下方同一区域产生gridview,(当然他们的gridview是不同的)。之前用MultiView来控制,用了几个view在html中绑定了几个Gridview,然后根据点击的按钮不同,切换不同的view。但总觉得这种方式不爽~~,html代码太多,控制起来很麻烦~!
  于是就想到用这种动态的方式实现。Html中只有一个div,用来放置生成的控件,其他全部在后台实现。
  有一点需要注意:如果是在html中加入的控件,页面回发前后系统都会对其状态和属性做viewstate处理,所以,回发时,根据页面生命周期:页面重新初始化并加载控件实例,而后loadViewstate加载控件属性和状态,之后回发前控件状态重新出现。但是对于动态加载的控件,viewstate记住了他们的属性和状态,但是并没有存储控件本身。所以回发后,控件也就不见了~
  鉴于此,有多种处理办法,但是归根到底,都需要在页面回发时的初始化状态下对动态控件重新加载。我这里所做的是在page_load事件中,对其重新加载的,当然也可以在更早的事件中做。
 说明: 因为是几个不同的加载,所以这里做个一个sign标记(用的static string, 也可以用属性),从而在重新加载的时候判断到底加载哪个gridview.
  废话不多说,看代码:
HTML:


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     <div id="list">
         <asp:Button ID="btngv" runat="server" Text="生成GridView 1" onclick="btngv_Click" />  
         <asp:Button ID="Button1" runat="server" Text="生成GridView 2" onclick="Button1_Click" />
     </div>
     <div id="divshow" runat="server" >
     <%...--在这里放置动态生成的gridview--%>
     </div>
    </div>
    </form>
</body>
</html>
  CS:


using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
...{
    GridView gvshow=null;
    public static string sign; 

    protected void Page_Load(object sender, EventArgs e)
    ...{
        if (sign != null) //根据标记符号来判断,重新绑定那个控件
        ...{
            if (sign == "gv1")
                setBind();
            else
                setBind2();
        }
    }

    public void setBind()
    ...{
        DataTable dt = getDataTable();  //获得数据源

         gvshow = new GridView();
        gvshow.Width = Unit.Pixel(700);
      
        gvshow.AutoGenerateColumns = false;
        gvshow.RowEditing += new GridViewEditEventHandler(gvshow_RowEditing); //添加编辑事件
        gvshow.RowDeleting +=new GridViewDeleteEventHandler(gvshow_RowDeleting);
        gvshow.DataSource = dt;

        for (int i = 0; i < dt.Columns.Count; i++)
        ...{
            BoundField bc = new BoundField();
            bc.DataField = dt.Columns[i].ColumnName.ToString();
            bc.HeaderText = dt.Columns[i].Caption.ToString();
            gvshow.Columns.Add(bc);
        }

        CommandField cf = new CommandField();
        cf.ButtonType = ButtonType.Link;
        cf.ShowEditButton = true;
        cf.CausesValidation = false;
        gvshow.Columns.Add(cf);

        CommandField cf2 = new CommandField();
        cf2.ButtonType = ButtonType.Link;
        cf2.ShowDeleteButton = true;
        cf2.CausesValidation = false;    

        gvshow.Columns.Add(cf2);

        gvshow.DataBind();
      
        divshow.Controls.Add(gvshow);
    }
    public void setBind2()
    ...{
        DataTable dt = getDataTable();  //获得数据源

        gvshow = new GridView();
        gvshow.Width = Unit.Pixel(700);

        gvshow.AutoGenerateColumns = false;
        gvshow.RowDeleting +=new GridViewDeleteEventHandler(gvshow_RowDeleting); //添加删除事件
        gvshow.DataSource = dt;

        for (int i = 0; i < dt.Columns.Count; i++)
        ...{
            BoundField bc = new BoundField();
            bc.DataField = dt.Columns[i].ColumnName.ToString();
            bc.HeaderText = dt.Columns[i].Caption.ToString();
            gvshow.Columns.Add(bc);
        }

        CommandField cf = new CommandField();
        cf.ButtonType = ButtonType.Link;
       cf.ShowDeleteButton = true;
        cf.CausesValidation = false;

        gvshow.Columns.Add(cf);

        gvshow.DataBind();

        divshow.Controls.Add(gvshow);
    }

    void gvshow_RowDeleting(object sender, GridViewDeleteEventArgs e)
    ...{
        int i = e.RowIndex;
        Response.Write("delete:" + gvshow.Rows[i].Cells[0].Text.ToString());
    }
    protected void btngv_Click(object sender, EventArgs e)  //条件选择后,点击生成按钮,生成特定的gridview
    ...{
        divshow.Controls.Clear();
        setBind();
        sign = "gv1";
    }

   public void gvshow_RowEditing(object sender, GridViewEditEventArgs e)
    ...{
        int i = e.NewEditIndex;
        string id = gvshow.Rows[i].Cells[0].Text.ToString();

        Response.Write("you want to edit"+id);
    }

    public DataTable getDataTable()
    ...{
        DAL.ISDApp01 cDal = new DAL.ISDApp01();
        string sql = "select * from test";
        DataTable dt = cDal.ExecuteQuery(sql).Tables[0];
        return dt;
    }
    protected void Button1_Click(object sender, EventArgs e)
    ...{
        divshow.Controls.Clear();
        setBind2();
        sign = "gv2";
    }
}

文章出处:http://www.diybl.com/course/4_webprogram/asp.net/netjs/2008520/117330.html

目录
相关文章
|
3月前
|
自然语言处理 C# 图形学
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
|
6月前
|
自然语言处理 C# 图形学
​一款开源的.NET程序集反编译、编辑和调试神器
本文介绍了.NET反编译和调试工具dnSpyEx的使用方法。dnSpyEx是dnSpy的非官方Fork版本,支持.NET Framework、.NET Core和Unity程序集的调试和编辑,具有多种语言界面。主要功能包括:浅色、蓝色和深色主题,调试支持,代码编辑以及多语言支持。用户可以从GitHub下载并直接运行dnSpyEx,无需安装。通过创建测试项目,编译成dll文件,然后使用dnSpyEx进行调试和编辑程序集中的代码和IL指令。此外,文章还提供了项目源码地址和相关优秀项目的链接。
129 0
|
7月前
|
SQL 开发框架 前端开发
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
85 0
|
7月前
|
SQL 开发框架 .NET
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
83 0
|
开发框架 .NET 数据库连接
在ASP.NET中实现选中、编辑和删除GridView数据项
在ASP.NET中实现选中、编辑和删除GridView数据项
在ASP.NET中实现选中、编辑和删除GridView数据项
|
机器学习/深度学习 编解码 人工智能
可直接编辑的高质量3D生成模型:中科院计算所等提出高质量三维深度生成方法SDM-NET
中科院计算所、香港城市大学、英国卡迪夫大学以及加拿大西蒙弗雷泽大学的研究者,近日提出了一种能够表达几何细节和复杂拓扑结构的三维模型深度生成方法 SDM-NET,解决了之前方法的一部分局限性,使得生成的模型具有高质量的几何细节并可以支持快速编辑。该研究已被计算机图形学顶会 Siggraph Asia 2019 接收。
178 0
可直接编辑的高质量3D生成模型:中科院计算所等提出高质量三维深度生成方法SDM-NET
|
机器学习/深度学习 编解码 图形学
可直接编辑的高质量3D生成模型:中科院计算所等提出高质量三维深度生成方法SDM-NET
中科院计算所、香港城市大学、英国卡迪夫大学以及加拿大西蒙弗雷泽大学的研究者,近日提出了一种能够表达几何细节和复杂拓扑结构的三维模型深度生成方法 SDM-NET,解决了之前方法的一部分局限性,使得生成的模型具有高质量的几何细节并可以支持快速编辑。该研究已被计算机图形学顶会 Siggraph Asia 2019 接收。
202 0
可直接编辑的高质量3D生成模型:中科院计算所等提出高质量三维深度生成方法SDM-NET
|
前端开发 .NET C#
ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 编辑表单 上一章节我们介绍了标签助手和 HTML 助手,也使用标签助手和 HTML 助手分别创建了一个职工列表,感觉好像有点喜欢上标签助手和 HTML 助手了,正好之前我们只讲解了如何列出数据,没有讲解如何创建表单来添加和修改数据 要不本章节我们就来讲讲? 顺带多用用标签助手和 HTML 助手 本章中,我们将继续讨论标签助手。
1904 0
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
45 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
72 0