当前位置: 首页 > 编程日记 > 正文

动态模板列更新数据分页的例子

前台:
<%@ Page language="c#" Codebehind="WebForm30.aspx.cs" AutoEventWireup="false" Inherits="csdn.WebForm30" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>WebForm30</title>
  <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  <meta name="CODE_LANGUAGE" Content="C#">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <link href="css.css" rel="stylesheet" type="text/css">
  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
 </HEAD>
 <body MS_POSITIONING="GridLayout">
  <form id="Form1" method="post" runat="server">
   <asp:DataGrid ID="DataGrid1" Runat="server"></asp:DataGrid>
  </form>
 </body>
</HTML>
后台:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace csdn
{
 /// <summary>
 /// WebForm30 的摘要说明。
 /// </summary>
 public class WebForm30 : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.DataGrid DataGrid1;
  
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   if(!IsPostBack)
   {
    BindGrid();
   }
   CreateDataGrid();//进行一些DataGrid的设置
  }
 
  protected void CreateDataGrid()
  { 
   DataGrid1.AutoGenerateColumns=false;//不启用自动生成列
   DataGrid1.CssClass="border";//边框样式
   DataGrid1.BorderWidth=0;
   DataGrid1.CellSpacing=1;
   DataGrid1.CellPadding=5;
   DataGrid1.ItemStyle.CssClass="item";//普通列样式
   DataGrid1.HeaderStyle.CssClass="header";//头样式
   DataGrid1.PagerStyle.CssClass="header";//页脚样式
   DataGrid1.DataKeyField="stuid";//主键字段
   DataGrid1.AllowPaging=true;//允许分页
   DataGrid1.PageSize=5;//分页大小
   DataGrid1.PagerStyle.Mode=PagerMode.NumericPages;//数字形式分页
   EditCommandColumn ecc=new EditCommandColumn();//更新按钮列
   ecc.ButtonType=ButtonColumnType.PushButton;//下压按钮
   ecc.EditText="编辑";
   ecc.CancelText="取消";
   ecc.UpdateText="更新";//按钮文字
   DataGrid1.Columns.Add(ecc);//增加按钮列
   DataGrid1.EditCommand+=new DataGridCommandEventHandler(DataGrid1_EditCommand);
   DataGrid1.UpdateCommand+=new DataGridCommandEventHandler(DataGrid1_UpdateCommand);
   DataGrid1.CancelCommand+=new DataGridCommandEventHandler(DataGrid1_CancelCommand);//更新、取消、编辑事件注册
   DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(DataGrid1_PageIndexChanged);//分页事件注册,这里需要注意注册事件代码的位置,不能放到BindGrid()中
   SetBind();   //绑定数据
  }

protected void BindGrid()
  {   
   TemplateColumn tm=new TemplateColumn();
   tm.ItemTemplate=new ColumnTemplate1();//普通列
   tm.EditItemTemplate=new ColumnTemplate2();//编辑列
   tm.HeaderText="姓名";
   DataGrid1.Columns.AddAt(0,tm);//在第一列增加第一个模板列
   TemplateColumn tm2=new TemplateColumn();
   tm2.ItemTemplate=new ColumnTemplate3();
   tm2.EditItemTemplate=new ColumnTemplate4();
   tm2.HeaderText="学院";
   DataGrid1.Columns.AddAt(1,tm2);//在第二列增加第一个模板列
   DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(DataGrid1_ItemDataBound);//数据绑定事件注册,这里需要注意注册事件代码的位置
   SetBind();
  }

protected void SetBind()
  {
   SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
   SqlDataAdapter da=new SqlDataAdapter("select * from stu,dep where stu.studepid=dep.depid",conn);
   DataSet ds=new DataSet();
   da.Fill(ds,"table1");
   this.DataGrid1.DataSource=ds.Tables["table1"];
   this.DataGrid1.DataBind();
  
  }

private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
  {
   SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
   SqlDataAdapter da=new SqlDataAdapter("select * from dep",conn);
   DataSet ds=new DataSet();
   da.Fill(ds,"table1");
   if(e.Item.ItemType==ListItemType.EditItem)
   {
    DropDownList ddl=(DropDownList)e.Item.FindControl("dep");
    ddl.DataSource=ds.Tables["table1"];
    ddl.DataTextField="depname";
    ddl.DataValueField="depid";
    ddl.DataBind();
    ddl.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"depid"))).Selected=true;
   }
  }

private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   this.DataGrid1.EditItemIndex=e.Item.ItemIndex;
   BindGrid();
  }

private void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   this.DataGrid1.EditItemIndex=-1;
   BindGrid();
  }

private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   string uid=e.Item.UniqueID+":";//注意别遗漏冒号
   SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
   SqlCommand comm=new SqlCommand("update stu set stuname=@name,studepid=@depid where stuid=@id",conn);
   SqlParameter parm1=new SqlParameter("@name",SqlDbType.NVarChar,50);
   parm1.Value=Request.Form[uid+"name"].ToString();
   SqlParameter parm2=new SqlParameter("@depid",SqlDbType.Int);
   parm2.Value=Request.Form[uid+"dep"].ToString();;
   SqlParameter parm3=new SqlParameter("@id",SqlDbType.Int);
   parm3.Value=this.DataGrid1.DataKeys[e.Item.ItemIndex];
   comm.Parameters.Add(parm1);
   comm.Parameters.Add(parm2);
   comm.Parameters.Add(parm3);
   conn.Open();
   comm.ExecuteNonQuery();
   conn.Close();
   this.DataGrid1.EditItemIndex=-1;
   BindGrid();   
//之所以不能采用以前的((TextBox)e.Item.FindControl("name")).Text来取得数据时因为,DataGrid列是动态添加的,根本取不到
  }

private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
  {
   this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
   BindGrid();
  }

#region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
 
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);

}
  #endregion
 }

public class ColumnTemplate1 : ITemplate
 {
  
  public void InstantiateIn(Control container)      
  {
   LiteralControl l = new LiteralControl();
   l.DataBinding += new EventHandler(this.OnDataBinding);
   container.Controls.Add(l);   
  }

public void OnDataBinding(object sender, EventArgs e)
  {
   LiteralControl l = (LiteralControl) sender;
   DataGridItem container = (DataGridItem) l.NamingContainer;
   l.Text = ((DataRowView)container.DataItem)["stuname"].ToString();
  }
 }

public class ColumnTemplate2 : ITemplate
 {
  public void InstantiateIn(Control container)      
  {
   TextBox t = new TextBox();
   t.Width=88;
   t.ID="name";//需要给一个id,在Request.Form的时候可以取
   t.DataBinding += new EventHandler(this.OnDataBinding);
   container.Controls.Add(t);   
  }

public void OnDataBinding(object sender, EventArgs e)
  {
   TextBox t= (TextBox) sender;
   DataGridItem container = (DataGridItem) t.NamingContainer;
   t.Text = ((DataRowView)container.DataItem)["stuname"].ToString();//绑定stuname字段
  }
 }

public class ColumnTemplate3 : ITemplate
 {
  public void InstantiateIn(Control container)      
  {
   LiteralControl l = new LiteralControl();
   l.DataBinding += new EventHandler(this.OnDataBinding);
   container.Controls.Add(l);   
  }

public void OnDataBinding(object sender, EventArgs e)
  {
   LiteralControl l = (LiteralControl) sender;
   DataGridItem container = (DataGridItem) l.NamingContainer;
   l.Text = ((DataRowView)container.DataItem)["depname"].ToString();
  }
 }

public class ColumnTemplate4 : ITemplate
 {
  public void InstantiateIn(Control container)      
  {
   DropDownList dpl = new DropDownList();
   dpl.ID="dep";
   container.Controls.Add(dpl);   
  }//这里没有为这个下拉框进行数据绑定,在DataGrid1的ItemDataBound中进行了这个操作
 }
}

代码比较简单,在代码中有注释简单的解释。
补充2点:(1)这次的DataGrid是在设计生成的,不是上次的运行时,后者会造成更新的紊乱;(2)处于简单,代码中模板列类没有很好的封装,在运用的时候还是应该对字段和模板列类型(ListItemType)进行封装

相关文章:

[您有新的未分配科技点]可,可,可持久化!?------0-1Trie和可持久化Trie普及版讲解...

这一次&#xff0c;我们来了解普通Trie树的变种&#xff1a;0-1Trie以及在其基础上产生的可持久化Trie&#xff08;其实&#xff0c;普通的Trie也可以可持久化&#xff0c;只是不太常见&#xff09; 先简单介绍一下0-1Trie&#xff1a;一个0-1Trie节点只有两个子节点&#xff0…

SQL查询1064报错 [ERR] 1064 - You have an error in your SQL syntax; check the manual.......

MySQL建表出现1064问题问题 SQL语句 DROP DATABASE IF EXISTS bookstore; DROP DATABASE bookstore; USE bookstore; CREATE TABLE t_user (id INT PRIMARY KEY auto_increment,username VARCHAR ( 20 ) NOT NULL UNIQUE,password VARCHAR ( 32 ) NOT NULL,email VARCHAR ( …

移动端丨-webkit-overflow-scrolling:touch属性导致页面卡住

起因 起因-webkit-overflow-scrolling问题解决方案&#xff1a; 方案一方案二思考为什么会出现这个问题总结故事的起因是&#xff0c;在一个多列表的页面上&#xff0c;页面在iOS11&#xff0c;跟iOS10中会发生页面卡住&#xff0c;不能进行滚动。 然后就怀疑是自己的样式写的出…

瑞星杀毒软件所有监控已禁用!

瑞星杀毒软件所有监控已禁用! 我的瑞星杀毒软件所有监控已禁用!在右下脚有个红色的小伞,可以升级,但是监控怎么都开启不了。 解决办法是&#xff1a;启动主程序&#xff0c;点“工具列表”&#xff0c;选择“瑞星监控中心”&#xff0c;点“运行”&#xff0c;在弹出的窗口…

Typora输出表情 Typora_Smile

文章目录小表情还挺好看的SmileNatureObjectsPlacesSymbols小表情还挺好看的 Smile &#x1f604; :smile:&#x1f606; :laughing:&#x1f60a; :blush:&#x1f603; :smiley:☺️ :relaxed:&#x1f60f; :smirk:&#x1f60d; :heart_eyes:&#x1f618; :kissing_hear…

COOKIE操作

import scrapyclass CookiedemoSpider(scrapy.Spider):name cookiedemo# allowed_domains [www.douban.com]start_urls [https://www.douban.com/accounts/login/]def parse(self, response):# 登录成功后对页面数据进行存储fp open("main.html", "w",…

01--安装Activiti流程设计器eclipse插件

Activiti1 安装流程设计器eclipse插件   Name:Activiti BPMN 2.0 designer&#xff08;随便起个名字&#xff09;   Location: http://activiti.org/designer/update/ 安装完成后勾选(不勾选不生成bpmn文件) 转载于:https://www.cnblogs.com/miye/p/7283468.html

许美静《盖被》

空白时光有你来填满可以是平静或灿烂有时浓有时淡心胸要宽广才能够经得起波浪在旅途中风起和云涌每个人都会有起落有时浮有时沉有时没方向有时在雾里向前闯一生中难免常会有不如意道路太平坦会失去了勇气就(让)算天塌下来把它当被盖我只想好好过现在日子太贫乏会失去了意义万里…

SBO顾问的收入

SAP顾问的收入&#xff0c;在很多文章都有专门记载了&#xff0c;有些人比我更熟悉。差别也是比较大&#xff0c;在我熟悉的行业SAP business one产品中&#xff0c;我给大家说说我所知道的sbo顾问的收入&#xff0c;给希望入这个行业的人或感兴趣的人一点小小的提示。总体来说…

带无线网卡的电脑开启热点

带无线网卡的电脑开启热点 文章目录带无线网卡的电脑开启热点准备&#xff1a;共享WiFi的建立建立Bat批处理文件准备&#xff1a; 无线网卡 大部分笔记本自带或USB无线网卡 验证你的无线网卡是否支持承载网络 按winR调出命令行&#xff0c;输入命令netsh wlan show drivers在…

BZOJ2275[Coci2010]HRPA——斐波那契博弈

题目描述 N个石子&#xff0c;A和B轮流取&#xff0c;A先。每个人每次最少取一个&#xff0c;最多不超过上一个人的个数的2倍。取到最后一个石子的人胜出&#xff0c;如果A要有必胜策略&#xff0c;第一次他至少要取多少个。 输入 第一行给出数字N&#xff0c;N<10^15.第二行…

MonoRail学习笔记一:一个小例子

随着微软放出消息&#xff0c;准备发布MVC的框架&#xff0c;各种议论纷至沓来。以前用java、jsp对它的MVC结构、集中控制印象特别深刻&#xff0c;自从用了.NET后&#xff0c;虽然webform的控件很好用&#xff0c;总感觉有点怪怪的在网上搜了一下&#xff0c;发现早就有了Mono…

一个总裁做企业的十条心得

经常面对很多企业老总&#xff0c;但能够促膝谈心的不多&#xff0c;原因是大家忙&#xff0c;忙得没时间想一些事情。在我采访的一个老总中&#xff0c;他给了我十句话&#xff0c;我铭刻在心&#xff0c;兹整理出来&#xff0c;共同分享。鉴于不便透露姓名&#xff0c;希望有…

BZOJ1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

n<100000个数表示每头牛在K<30种物品的选取情况&#xff0c;该数在二进制下某位为0表示不选1表示选&#xff0c;求一个最大的区间使区间内选择每种物品的牛一样多。 数学转化&#xff0c;把不同状态间单变量的关系通过不等式移项转变为单状态的多变量关系。 sum[i,j]表示…

AttributeError: Cant get attribute SPPF on module models

运行YOLOV5出现报错AttributeError: Cant get attribute SPPF 问题 AttributeError: Cant get attribute SPPF 运行yolov5下面Tags5的代码出现问题&#xff1a; AttributeError: Cant get attribute SPPF on module models 搞了很久&#xff0c;最终得到解决方案&#xff0…

Compiere去掉启动时的下面显示的进度条

package org.compiere.apps;public class AMenuStartItem extends Thread implements ActionListener{*****************public void run(){*********************//SwingUtilities.invokeLater(m_resetPB);********************//SwingUtilities.invokeLater(m_updatePB);}}

redis命令大全

一、key pattern 查询相应的key &#xff08;1&#xff09;Redis允许模糊查询key 有3个通配符 *、?、[] &#xff08;2&#xff09;randomkey&#xff1a;返回随机key &#xff08;3&#xff09;type key&#xff1a;返回key存储的类型 &#xff08;4&#xff09;exis…

批量下载文献中的参考文献

批量下载文献中的参考文献 这里写目录标题批量下载文献中的参考文献一级目录二级目录三级目录一、下载所有你需要文献的引文题录二、导入到文献管理软件中**点击导入文献&#xff0c;上一步已经下载的&#xff0c;如果不会EndNote导入题录的话也可以直接拖进去或者百度咯****导…

python Django 学习笔记

* python版本和Django对应的关系&#xff1a; * Django2.0系列之后&#xff0c;不支持python2.x系列 * 安装&#xff1a; pycharm直接可以搜索安装&#xff0c;可以省略手工安装的麻烦 需要手动安装&#xff1a;pip install django * 转载于:https://www.cnblogs.com/chenadong…

reporting Server組件不全引起的致命錯誤

在做專案的時候&#xff0c;前几天release一個windows的版本可以工作得很好&#xff0c;但今天release出去的卻出現在致命錯誤&#xff0c;根本無法啟動,從事件管理器中把錯誤信息摘出如下&#xff1a;事件類型: 錯誤 事件來源: .NET Runtime 2.0 Error Reporting 事件類別目錄…

祝大家端午节快乐

今天是农历五月五日&#xff0c;端午节&#xff0c;祝大家节日快乐&#xff01;吃粽子啦&#xff01;&#xff01;

shell脚本中判断上一个命令是否执行成功

2018-12-21 shell中使用符号“$?”来显示上一条命令执行的返回值&#xff0c;如果为0则代表执行成功&#xff0c;其他表示失败。结合if-else语句实现判断上一个命令是否执行成功 示例如下&#xff1a; if [ $? -ne 0 ]; thenecho "failed" elseecho "succeed&…

Opencv4测试报错00007FFB3253A9C0 (ntdll.dll)处引发的异常: 0xC0000005: 读取位置 0x0000000000000010 时发生访问冲突

报错信息如下&#xff1a; 0x00007FFB3253A9C0 (ntdll.dll)处(位于 test1.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000010 时发生访问冲突 刚刚安装了Opencv4.5,并且在Visual Studio 2019中进行了配置&#xff0c;准备测试一下是否运行良好&#xff0c;进行一个…

Python ATM

# ATM 模拟实现# 功能&#xff1a;# 输入对应的数字进入不同的功能&#xff1a;# 1. 支持进入商城购物&#xff0c;并通过信用卡结账。# 2. 支持信用卡余额查询。# 3. 支持不同用户之间的转账。# 4. 支持账单还款&#xff08;充值功能&#xff09;。# 5. 支持查看账单详情。# 6…

从.NET1.1升级到.NET2.0时出现的PInvokeStackImbalance错误

从.NET1.1升级到.NET2.0时出现的PInvokeStackImbalance错误 微软官方的解释(http://msdn2.microsoft.com/zh-cn/library/0htdy0k3.aspx) 如果 CLR 检测到平台调用之后的堆栈深度与 DllImportAttribute 属性指定的调用约定中以及托管签名的参数声明中提供的预期堆栈深度不匹配&a…

我在犹豫是不是该收集这几首MP3

我在犹豫是不是该收集这几首MP3&#xff0c;确实&#xff0c;曲子歌词都非常不错。可我找不到收藏的理由。总是一个想法&#xff0c;让我放弃和错过了很多东西&#xff1a;我已经错过和失去了很多&#xff0c;这一次又算什么呢&#xff1f;这样的想法让我在面对很多人或事都已经…

大数据【四】MapReduce(单词计数;二次排序;计数器;join;分布式缓存)

前言&#xff1a; 根据前面的几篇博客学习&#xff0c;现在可以进行MapReduce学习了。本篇博客首先阐述了MapReduce的概念及使用原理&#xff0c;其次直接从五个实验中实践学习&#xff08;单词计数&#xff0c;二次排序&#xff0c;计数器&#xff0c;join&#xff0c;分布式缓…

Flutter中集成Font Awesome

1、添加引用 在 pubspec.yaml文件中&#xff0c;加入 font awesome的引用 1 dependencies:2 flutter:3 sdk: flutter4 5 # The following adds the Cupertino Icons font to your application.6 # Use with the CupertinoIcons class for iOS style icons.7 cupert…

sed linux 命令

sed linux 命令 1. Sed简介 2. 定址 3. Sed命令 4. 选项 5. 元字符集 6. 实例 7. 脚本 1. Sed简介 sed 是一种在线编辑器&#xff0c;它一次处理一行内容。处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为“模式空间”&#xff08;pattern space&#xff…

Typora链接跳转,页内和页外

Typora链接跳转Typora链接跳转跳转到给定链接跳转到指定文件页内跳转跳转到标题所在位置跳转到非标题所在位置&#xff0c;即页面内任何位置测试位置Typora链接跳转 跳转到给定链接 这个简单&#xff0c;直接使用语法[名称](url) 例如&#xff1a;百度 跳转到指定文件 页内…