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

ASP.NET2.0中用Gridview控件操作数据

在ASP.NET 2.0中,加入了许多新的功能和控件,相比asp.net 1.0/1.1,在各方面都有了很大的提高。其中,在数据控件方面,增加了不少控件,其中的Gridview控件功能十分强大。在本文中,将探讨Gridview控件中的一些功能特性和用法,如果各位读者对Gridview控件不大了解,可以通过《 使用ASP.NET 2.0中的Gridview控件》一文,来对Gridview控件有个初步的认识。

1、使用Gridview插入新记录

在Gridview控件中,可以实现插入新记录的操作(见《使用ASP.NET 2.0中的Gridview控件》)一文,但如果想实现在Gridview中,实现在Gridview控件的最后一行,提供一个空白行给用户输入要输入的记录,那无疑是很方便的。下面将介绍其实现方法。

首先,我们打算在让用户进行选择,当用户需要新增一记录时,便点击新增按钮,之后在Gridview的最后一行里,显示一个空白行,让用户按字段进行输入,如下图所示:


当用户决定不输入新空白记录时,可以按"cancel"按钮返回,该空白行消失。要实现这样的效果,我们可以充分利用Gridview的footer的模版功能进行自定义,因为有3列,所以,在每一列的footer模版中,定义如下:

<asp:Gridview ID="Gridview1" Runat="server" DataSourceID="SqlDataSource1" DataKeyNames="CustomerID" AutoGenerateColumns="False" ShowFooter="True">
<Columns>
 <asp:TemplateField>
  <ItemTemplate>
   <asp:Label ID="CustomerIDLabel" Runat="Server"><%# Eval("CustomerID") %></asp:Label>
  </ItemTemplate>
  <FooterTemplate>
   <asp:TextBox ID="CustomerIDTextBox" Runat="server"></asp:TextBox>
  </FooterTemplate>
 </asp:TemplateField>

 <asp:TemplateField>
  <ItemTemplate>
   <asp:Label ID="CompanyNameLabel" Runat="Server"><%# Eval("CompanyName") %></asp:Label>
  </ItemTemplate>
  <FooterTemplate>
   <asp:TextBox ID="CompanyNameTextBox" Runat="server"></asp:TextBox>
  </FooterTemplate>
 </asp:TemplateField>

 <asp:TemplateField>
  <FooterTemplate>
   <asp:DropDownList ID="ContactTitleDropDownList" Runat="server" DataSourceID="SqlDataSource2" DataTextField="ContactTitle" DataValueField="ContactTitle">
   </asp:DropDownList>
   <asp:SqlDataSource ID="SqlDataSource2" Runat="server" SelectCommand="SELECT DISTINCT [ContactTitle] FROM [Customers]"
ConnectionString="server=localhost;uid=sa;password=xxx;database=northwind">
   </asp:SqlDataSource>

   <asp:Button ID="Button1" Runat="server" Text="Add" OnClick="Button1_Click" />
   <asp:Button ID="CancelButton1" Runat="server" Text="Cancel" OnClick="CancelButton1_Click" />
  </FooterTemplate>

 <ItemTemplate>
  <asp:DropDownList ID="ContactTitleDropDown" SelectedValue=’<%# Bind("ContactTitle") %>’ Runat="Server" DataSourceID="SqlDataSource3" DataTextField="ContactTitle" DataValueField="ContactTitle" ></asp:DropDownList>
  <asp:SqlDataSource ID="SqlDataSource3" Runat="server" SelectCommand="SELECT DISTINCT [ContactTitle] FROM [Customers]"
ConnectionString="server=localhost;uid=sa;password=xxxx;database=northwind" EnableCaching="True">
  </asp:SqlDataSource>
 </ItemTemplate>
 </asp:TemplateField>
</Columns>
</asp:Gridview>

以上为Gridview的代码,可以看到,在第一,二列的<foottemplate>列中,分别提供了customerid和companyname两个文本框以供用户输入,在第三列的<footertemplate>列中,以dropdownlistbox的形式来显示contracttitle.。其中,请注意第三列的footertemplate中的add和cancel两个按钮的,它们的事件代码如下

<script runat="server">
void CancelButton1_Click(object sender, EventArgs e)
{
 Gridview1.ShowFooter = false;
}
void AddButton1_Click(object sender, EventArgs e)
{
 Gridview1.ShowFooter = true;
}

 //点add按钮时,将新增的记录更新到数据库中去
void Button1_Click(object sender, EventArgs e)
{
 TextBox customerID = Gridview1.FooterRow.FindControl("CustomerIDTextBox") as TextBox;
 TextBox companyName = Gridview1.FooterRow.FindControl("CompanyNameTextBox") as TextBox;
 DropDownList ContactTitle = Gridview1.FooterRow.FindControl("ContactTitleDropDownList") as DropDownList;
 SqlDataSource1.InsertParameters["CustomerID"].DefaultValue = customerID.Text;
 SqlDataSource1.InsertParameters["CompanyName"].DefaultValue = companyName.Text;  
 SqlDataSource1.InsertParameters["ContactTitle"].DefaultValue=ContactTitle.SelectedValue;
 SqlDataSource1.Insert();
}
</script>

其中的cancel按钮的事件,用来取消显示Gridview的footer模版,因此设置showfooter属性为false,而addbutton1按钮,是当用户决定新增记录时点选的,此时将设置showfooter属性为true,以显示各列的foottemplate,从而达到显示新的一个空白行的目的。

而在更新代码button1_click事件中,将首先使用Gridview1.footerrow.findcontrol的方法,将用户新增的各字段的值提取出来,然后分别赋值给sqldatasource的insertparameters集合(注意要一一对应),最后使用sqldatasource的insert方法,就可以成功向数据库增加一条新记录了。

另外,为了在 窗体加载时, 显示数据库northwind中customers表的数据,需要设置sqldatsource1的属性,如下代码:

<asp:SqlDataSource ID="SqlDataSource1" Runat="server"
InsertCommand="INSERT INTO [Customers] ([CustomerID], [CompanyName], [ContactTitle]) VALUES (@CustomerID, @CompanyName, @ContactTitle)"
SelectCommand="SELECT top 5 [CustomerID], [CompanyName], [ContactTitle] FROM [Customers]"
ConnectionString="server=localhost;uid=sa;password=XXXXX;database=northwind">
<InsertParameters>
<asp:Parameter Type="String" Name="CustomerID"></asp:Parameter>
<asp:Parameter Type="String" Name="CompanyName"></asp:Parameter>
<asp:Parameter Type="String" Name="ContactTitle"></asp:Parameter>
</InsertParameters>
</asp:SqlDataSource>

其中,必须设置insertcommand和selectcommand属性,设置数据提取和插入的语句,并且要设置好insertparameters集合中,各字段的类型和名称即可。
2、一次性更新所有的Gridview记录

我们经常会遇到这样的情况,在Gridview中列出的所有记录中,有时要同时修改多条记录,并且将其保存到数据库中去。那么在Gridview中应该如何实现呢?在Gridview中,有两种实现的方法,下面分别进行介绍:

先来看下第一种方法,本方法是使用sqldatasource来更新所有记录,但这个方法比较慢,因为每更新一条记录都要建立数据连接并执行updatecommand,会影响性能。其主要代码如下:

<script runat="server">
void Button1_Click(object sender, EventArgs e)
{
 for (int i = 0; i < Gridview1.Rows.Count; i++)
 {
  GridviewRow row = Gridview1.Rows[i];
  SqlDataSource1.UpdateParameters[0].DefaultValue = ((TextBox)row.Cells[0].FindControl("TextBox2")).Text;
  SqlDataSource1.UpdateParameters[1].DefaultValue = ((TextBox)row.Cells[1].FindControl("TextBox3")).Text;
  SqlDataSource1.UpdateParameters[2].DefaultValue = Gridview1.DataKeys[i].Value.ToString();
  SqlDataSource1.Update();
 }
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
 <form id="form1" runat="server">
 <div>
 <asp:Gridview ID="Gridview1" Runat="server" DataSourceID="SqlDataSource1" DataKeyNames="CustomerID" AutoGenerateColumns="False">
 <Columns>
 <asp:TemplateField SortExpression="CustomerID" HeaderText="CustomerID">
 <ItemTemplate>
  <asp:TextBox Runat="server" Text=’<%# Bind("CustomerID") %>’ ID="TextBox1"></asp:TextBox>
 </ItemTemplate>

 </asp:TemplateField>
  <asp:TemplateField SortExpression="CompanyName" HeaderText="CompanyName">
  <ItemTemplate>
   <asp:TextBox Runat="server" Text=’<%# Bind("CompanyName") %>’ ID="TextBox2"></asp:TextBox>
  </ItemTemplate>
 </asp:TemplateField>

 <asp:TemplateField SortExpression="ContactName" HeaderText="ContactTitle">
  <ItemTemplate>
   <asp:TextBox Runat="server" Text=’<%# Bind("ContactTitle") %>’ ID="TextBox3"></asp:TextBox>
  </ItemTemplate>
 </asp:TemplateField>
 </Columns>

 </asp:Gridview>
<asp:SqlDataSource ID="SqlDataSource1" Runat="server"
SelectCommand="SELECT [CustomerID], [CompanyName], [ContactName], [ContactTitle] FROM [Customers]"
UpdateCommand="UPDATE [Customers] SET [CompanyName] = @CompanyName, [ContactTitle] = @ContactTitle WHERE [CustomerID] = @CustomerID"
ConnectionString="server=localhost;uid=sa;password=xxxx;database=northwind">
<UpdateParameters>
<asp:Parameter Type="String" Name="CompanyName"></asp:Parameter>
<asp:Parameter Type="String" Name="ContactTitle"></asp:Parameter>
<asp:Parameter Type="String" Name="CustomerID"></asp:Parameter>
</UpdateParameters>
</asp:SqlDataSource>
<asp:Button ID="Button1" Runat="server" Text="Button" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>

在上面的代码中,我们必须首先指定updateparameters参数集合,也就是指出要更新的是哪些字段,它们的类型是什么。之后并指出sqldatasource的updatecommand语句。而在更新按钮button1的CLICK事件中,将以遍历的形式,使用for循环,对Gridview中的每一行进行检查,将每个更新了的文本框的内容放到sqldatasouce的updateparameters参数中去,最后调用sqldatasource的update方法,完成更新。

方法2使用的是首先遍历Gridview中的每一行,并且使用SQL语句,将要更新的内容连接起来,然后最后才使用command.ExecuteNonQuery()进行更新,效率高了,主要代码如下:

protected void Page_Load(object sender, EventArgs e)
{

if (!Page.IsPostBack)
{
 SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AppConnectionString1"].ConnectionString);
 SqlCommand command = new SqlCommand("SELECT [CustomerID], [CompanyName], [ContactName], [ContactTitle] FROM [Customers]", con);
 con.Open();
 Gridview1.DataSource = command.ExecuteReader();
 Gridview1.DataBind();
 con.Close();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
 StringBuilder query = new StringBuilder();
 for (int i = 0; i < Gridview1.Rows.Count; i++)
 {
  GridviewRow row = Gridview1.Rows[i];
  string value1 = ((TextBox)row.Cells[0].FindControl("TextBox2")).Text.Replace("’", "’’");
  string value2 = ((TextBox)row.Cells[1].FindControl("TextBox3")).Text.Replace("’", "’’");
  string value3 = Gridview1.DataKeys[i].Value.ToString();
  query.Append("UPDATE [Customers] SET [CompanyName] = ’").Append(value1).Append("’ , [ContactTitle] = ’")
.Append(value2).Append("’ WHERE [CustomerID] = ’").Append(value3).Append("’;/n");
 }

 SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AppConnectionString1"].ConnectionString);
 SqlCommand command = new SqlCommand(query.ToString(), con);
 con.Open();
 command.ExecuteNonQuery();
 con.Close();
}
}

其中要特别注意一点的是,在vs.net 2005 beta 2开始,如果你在web.config中使用了数据库连接字符串的配置,那么应该按如下的方法去写:

<connectionStrings>
<add name="NorthwindConnectionString" connectionString="Data Source=LIAO;Initial Catalog=Northwind;User ID=sa;Password=xxxx" providerName="System.Data.SqlClient"/>
</connectionStrings>

然后在程序中如下进行读取:

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AppConnectionString1"].ConnectionString);

相关文章:

人工智能在消费领域,都做了哪些事?

来源 | 人民数字FINTECH责编 | 晋兆雨头图 | CSDN 下载自视觉中国#AI正在融入生活的方方面面近日,北京一购物中心开业,在开业当天迎宾的并不是“人”而是“机器人”。在这里你可以体验到高科技高颜值的机器人“迎宾团”给你带来的贵宾级的服务&#xff0…

poj 1681 Painter#39;s Problem(高斯消元)

http://poj.org/problem?id1681 求最少经过的步数使得输入的矩阵全变为y。 思路&#xff1a;高斯消元求出自由变元。然后枚举自由变元&#xff0c;求出最优值。注意依据自由变元求其它解及求最优值的方法。 #include <stdio.h> #include <algorithm> #include <…

ASP.NET 2.0中GRIDVIEW排序

在 headertemplate中加一张UP.GIF和DOWN.GIF(就是升序&#xff0c;倒序的示意图&#xff09; % Page Language"C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html…

基础篇9-python基本数据结构-列表

基础篇9-python基本数据结构-列表一.列表&#xff1a;1.有序的集合2.通过偏移来索引&#xff0c;从而读取数据3.支持内嵌a [[1,2,3],[4,5,6]]4.可变类型a[0][1] 7二.切片a [1,2,3,4,5,6,7]a[0:3:1]0 索引开始3 索引结束1 间隔(默认1)正向索引 它是从左往右索引假如要取出1234…

用AI打造科技公益新模式,腾讯发起公益创新挑战赛,聚焦三大社会问题

近日&#xff0c;由腾讯基金会、企鹅伴成长、腾讯优图实验室、腾讯云AI、腾讯云开发联合发起的腾讯Light公益创新挑战赛在三亚宣布正式启动。本次比赛以“AI&#xff0c;让美好现在发生”为主题&#xff0c;与联合国儿童基金会、深圳市信息无障碍研究会、桃花源生态保护基金会三…

一个查看全部用户的磁盘空间使用情况的脚本

一个查看全部用户的磁盘空间使用情况的脚本 脚本程序例如以下&#xff1a; #!/bin/sh for user in ls /home dodu -hs "/home/"$user done脚本运行结果&#xff1a; [rootsyy ~]# . homeusage.sh 32K /home/saleli 9.2G /home/syy 500K /home/wph太简单了…

Gridview导出到Excel,Gridview中的各类控件,Gridview中删除记录的处理

Asp.net 2.0中新增的gridview控件&#xff0c;是十分强大的数据展示控件&#xff0c;在前面的系列文章里&#xff0c;分别展示了其中很多的基本用法和技巧&#xff08;详见&#xff1c; ASP.NET 2.0中Gridview控件高级技巧&#xff1e;)。在本文中&#xff0c;将继续探讨有关的…

对标Oculus Quest2,爱奇艺奇遇VR打的什么牌?

出品 | AI科技大本营 作者 | 阿司匹林 1月6日&#xff0c;爱奇艺奇遇VR在京召开主题为“谁与争锋”的VR技术发布会&#xff0c;正式发布国内首个CV&#xff08;计算机视觉技术&#xff09;头手6DoF VR交互技术——追光&#xff0c;并面向全球VR游戏开发者启动“哥伦布计划”。 …

DVWA默认用户名密码

有些东西不好找啊&#xff0c;自己动手丰衣足食&#xff5e;&#xff5e; DVWA默认的用户有5个&#xff0c;用户名密码如下&#xff08;一个足以&#xff09;&#xff1a; admin/password gordonb/abc123 1337/charley pablo/letmein smithy/password转载于:https://www.cnblog…

idea 基本设置

1. 打开首先设置 maven,添加配置文件 2.自动导入 搜索 auto import ,勾选 Optimize imports on the fly&#xff1a;自动去掉一些没有用到的包Add unambiguous imports on the fly&#xff1a;自动帮我们优化导入的包3.快捷键 切换成 eclipse 版本&#xff0c;智能提示快捷键 …

ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)

学习整理了一下(一).功能用HttpHandler实现图片验证码(二).代码如下1. 处理程序文件 ValidateImageHandler.ashx代码如下1 <% WebHandler Language"C#"Class"ValidateImageHandler"%>2 3 usingSystem;4 usingSystem.Web;5 usingSystem.Web.SessionSt…

linux下配置ip地址的方法

&#xff08;1&#xff09;Ifconfig命令第一种使用ifconfig命令配置网卡的ip地址。此命令通常用来零时的测试用&#xff0c;计算机启动后ip地址的配置将自动失效。具体用法如下。Ipconfig ethx ipadd netmask x.x.x.x。其中ethx中的x代表第几快以太网卡&#xff0c;…

百万美元技术大奖,雷军颁给了秒充和隐私保护技术团队

1月7日&#xff0c;2020年小米百万美金技术大奖揭晓&#xff0c;经过小米集团技术委员会多轮评选&#xff0c;手机部小米秒充团队、软件与体验部的MIUI隐私保护团队&#xff0c;双双赢得了价值100万美元的技术大奖&#xff08;小米受限股&#xff09;。 120W有线秒充&#xff…

在 Android 应用程序中使用 SQLite 数据库以及怎么用

part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库。它支持 SQL 语言&#xff0c;而且仅仅利用非常少的内存就有非常好的性能。此外它还是开源的&#xff0c;不论什么人都能够使用它。很多开源项目&#xff08;(Mozilla, PHP, Python&#xf…

asp.net 2.0 权限树的控制

做权限的时候,主要实现如下功能1、该节点可以访问&#xff0c;则他的父节点也必能访问&#xff1b;2、该节点可以访问&#xff0c;则他的子节点也都能访问&#xff1b;3、该节点不可访问&#xff0c;则他的子节点也不能访问。使用带CheckBox的数型结构能得到很好的用户体验,可是…

腾讯首位17级杰出科学家诞生:腾讯AI Lab负责人张正友

2021年1月8日腾讯宣布&#xff0c;腾讯Robotics X实验室及腾讯AI Lab负责人张正友博士成为腾讯首位17级研究员/杰出科学家&#xff0c;17级是腾讯历史上最高的专业职级。 腾讯AI Lab及腾讯Robotics X实验室负责人张正友博士荣获这一殊荣的张正友博士&#xff0c;领导创建了世界…

论性能测试的必要性

论性能测试的必要性说起为什么要进行性能测试&#xff0c;前面已经多少谈到一些。下面&#xff0c;从“性能测试与功能测试关系”及“性能自动化测试优势”两方面给读者作答。1. 性能测试与功能测试关系性能测试和功能测试是测试工作中两个不同的方面&#xff0c;只是在关注的内…

Spring学习系列(二) 自动化装配Bean

一、Spring装配-自动化装配 Component和ComponentScan 通过spring注解&#xff08;Component&#xff09;来表明该类会作为组件类&#xff0c;并告知Spring要为这类创建bean&#xff0c;不过组件扫描默认是不启动的&#xff0c;需要显式的配置Spring&#xff0c;从而命令Spring…

如何让SELECT 查询结果额外增加自动递增序号

图表1如果数据表本身并不内含自动地增编号的字段时&#xff0c;要怎么做才能够让SELECT查询结果如图表1所示&#xff0c;额外增加自动递增序号呢&#xff1f;我们提供下列五种方法供您参考&#xff1a;USE北风贸易;GO/* 方法一*/SELECT序号(SELECT COUNT(客户编号)FROM 客户AS …

UVa 10131

1 /*2 3 * 类似于最长递减子序列4 */5 #include<stdio.h>6 7 #include<string.h>8 #include<algorithm>9 using namespace std; 10 #define Max(x,y) (x>y?x:y) 11 #define max 10005 12 struct node{ 13 int w,s,c; 14 }a[max]; 15 int dp[max]; 16…

再见 VBA!神器工具统一 Excel 和 Python

作者 | 东哥起飞来源 | Python数据科学经常给大家推荐好用的数据分析工具&#xff0c;也收到了铁子们的各种好评。这次也不例外&#xff0c;我要再推荐一个&#xff0c;而且是个爆款神器。Excel和Jupyter Notebok都是我每天必用的工具&#xff0c;而且两个工具经常协同工作&…

Android 开发者必知的开发资源

英文原文&#xff1a;Bongzimo 翻译: ImportNew-黄小非 译文链接&#xff1a;http://www.importnew.com/3988.html Android 开发者必知的开发资源 随着Android平台市场份额的持续猛增 &#xff0c;越来越多的开发者开始投入Android应用程序的开发大潮。如果您是一位2013年刚刚…

SQL Server各种日期计算方法

通常&#xff0c;你需要获得当前日期和计算一些其他的日期&#xff0c;例如&#xff0c;你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割&#xff08;年、月、日等&#xff09;&#xff0c;然后仅仅用分割出来的年、月、日等放在几…

TensorFlow入门

为什么80%的码农都做不了架构师&#xff1f;>>> TensorFlow核心教程 导入TensorFlow计算图tf.train API 完成程序tf.contrib.learn 基本用法自定义模型下一步原文链接 : https://www.tensorflow.org/get_started/get_started 译文链接 : http://www.apache.wiki/pa…

C#实现类似qq的屏幕截图程序

因为近来想写个类似于远程桌面监控的程序,该程序中要用到屏幕捕捉.为实现该程序的一部分功能,做了个小DEMO.程序很简单&#xff0c;用到的技术也不多&#xff0c;只能实现类似qq的截图功能(方法虽然很笨) 程序流程如下&#xff1a;1.截取整个屏幕并保存 2.新开一个全屏窗口,将保…

构建RESTful风格的WCF服务

RESTful Wcf是一种基于Http协议的服务架构风格。 相较 WCF、WebService 使用 SOAP、WSDL、WS-* 而言&#xff0c;几乎所有的语言和网络平台都支持 HTTP 请求。 RESTful的几点好处&#xff1a; 1、简单的数据通讯方式&#xff0c;基于HTTP协议。避免了使用复杂的数据通讯方式。 …

又一起“删库”:链家程序员怒删公司 9TB 数据,被判 7 年

整理 | 王晓曼来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;1月6日&#xff0c;北京市第一中级人民法院公布前链家员工破坏计算机信息系统罪一案的刑事裁定书&#xff0c;被告人因不满工作调整&#xff0c;删公司9TB数据。北京市海淀区人民法院判决认定&#xff…

hbase以mr导数据方式

./hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator"," -Dimporttsv.columnsHBASE_ROW_KEY,f1:name,f1:age,f1:addr t1 /zldata/demo1.csv转载于:https://www.cnblogs.com/sajia/p/6972420.html

Php中正则小结(一)

一.概念 语法模式类似perl.表达式必须用分隔符闭合&#xff0c;比如一个正斜杠(/). 分隔符可以是任意非字母非数字&#xff0c;除反斜杠(\)和空字节之外的非空白ascii字符 如果分隔符 在表达式中使用&#xff0c;需要使用反斜线进行转义。 二.组成 元字符 一个正则表达式基本组…