使用Gridview插入新记录

C# DevExpress中GridControl控件的基本属性设置和使用方法(1) C# DevExpress中GridControl控件的基本属性设置和使用方法 阅读详情

在ASP.net 2.0中,加入了许多新的功能和控件,相比ASP.NET 1.0/1.1,在各方面都有了很大的提高。其中,在数据控件方面,增加了不少控件,其中的Gridview控件功能十分强大。

  在ASP.net 2.0中,加入了许多新的功能和控件,相比ASP.NET 1.0/1.1,在各方面都有了很大的提高。其中,在数据控件方面,增加了不少控件,其中的Gridview控件功能十分强大。

1、使用Gridview插入新记录

  在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);  

我让VS2008中的GridView控件允许你插入新记录 ~~~(C#)  GridView控件不允许你插入新记录。 本文中我将举例说明快速解决这个问题的方法。介绍几个月前我写了一篇文章,是讲述一个允许你在DataGrid里添加一条新记录的技巧。 GridView控件不允许你插入新记录。 这种情况下开发人员经常使用如下的技术增加新记录:      ·他们在GridView的下面放置一个DetailsView控件。 用户可以通过DetailsView增加新记录,然后这条新 阅读详情

相关推荐

c# gridview底部空行插入数据(Insert Row)

C#2008源码(附mssql资料库2000及以上版本支持均支持) girdview本身不支持添加数据行功能,最简单最实用的功能(insertRow)。 使用方法:先将testdb文件还原到sql server数据库,打开Microsoft Visual Studio 2008,选择“文件”菜单→“打开”→“网站”,打开下载的文件夹。如果有建议或不明白的内容可以MSN:mansai@163.com与我联系。

如何使用最简便的方式实现GridView下的插入/新建数据操作

GridView控件不允许你插入新记录。 本文中我将举例说明快速解决这个问题的方法。介绍几个月前我写了一篇文章,是讲述一个允许你在DataGrid里添加一条新记录的技巧。 GridView控件不允许你插入新记录。 这种情况下开发人员经常使用如下的技术增加新记录: ·他们在GridView的下面放置一个DetailsView控件。 用户可以通过DetailsView增...

weixin_34227447的博客 656

期权专题9:雪球期权(一)(BSM+蒙特卡罗定价)

python;雪球定价;蒙特卡罗

mhmh123789的博客 8100

Devexpress GridView使用gridView.AddNewRow()添加新行无效的解决方案

Devexpress GridView使用gridView.AddNewRow()添加新行无效的解决方案

lhycl的专栏 1742

聚类技术:发展历史、主要分类与重要论文解析

在数据挖掘和机器学习的广袤领域中,聚类作为一种强大的无监督学习技术,一直扮演着至关重要的角色。它能够帮助我们从海量的数据中发现隐藏的模式和结构,将相似的数据对象归为一类,从而为进一步的分析和决策提供有价值的信息。

qq_48131648的博客 2630

SpyGlass Lint脚本实战:从环境配置到报告生成的完整流程解析

本文详细解析了使用SpyGlass Lint脚本进行数字芯片设计代码质量检查的完整自动化流程。从环境配置、目录结构设计,到核心TCL脚本的编写与模块化配置,再到脚本执行、调试技巧及报告解读,提供了构建健壮、可维护自动化检查框架的实战指南。文章重点阐述了如何通过脚本实现从环境配置到报告生成的一键式操作,并探讨了与企业级CI/CD流程集成的进阶方案。

weixin_29196613的博客 436

获取gridview中选择行时,前一次选择的行的数据

        private void gridView1_BeforeLeaveRow(object sender, DevExpress.XtraGrid.Views.Base.RowAllowEventArgs e)        {            int intRowHandle = e.RowHandle;            object oRevDate = gridVi

ql141406的专栏 863

西门子S7-1200 PLC与伺服电机控制实战解析

工业自动化控制系统中,PLC(可编程逻辑控制器)与伺服电机的协同工作是实现精密运动控制的核心技术。通过PROFINET工业以太网协议,PLC可以高效地控制多台伺服电机,实现定位、同步和插补等复杂运动。在实际工程应用中,硬件组态的正确配置和运动控制算法的优化是关键挑战。本文以西门子S7-1200 PLC控制五台伺服电机的项目为例,详细介绍了从硬件组态、运动控制程序实现到HMI界面设计的全流程。特别针对多轴同步插补运动、动态速度曲线调整等特殊工艺需求,提供了实用的解决方案和调试技巧,为工业自动化领域的工程师提供

weixin_30252709的博客 497

C# winform DataGridView 操作大全

C# winform DataGridView 操作大全   、  http://blog.csdn.net/ibmfahsion 张迅雷总结: -------------------------------------------------------------------------------- C# DataGridView控件动态添加新行 DataG

Ai大模型,odoo,idempiere,metasfresh,低代码,ecshop数据采集发布接口,zencart,lightinthebox,shopex 数据采集接口 1万+

讲透 ABAP CDS 注解名称:简单名、结构化名、@ 与 @<、作用域与分组

本文从开发者角度梳理ABAP CDS注解的命名规则与实战写法,重点解析: 语法规则:@与@<的使用场景、结构化命名规范、作用域唯一性要求 评估机制:ABAP运行时与组件框架的注解处理差异 分组技巧:花括号分组简化重复前缀的书写 实战示例:包含完整CDS View Entity(演示注解分组与@<用法)和ABAP报表(读取打印注解) 常见问题:命名错误导致激活失败、框架忽略等注意事项 最后通过航空预订统计案例,展示如何结合多种注解类型实现业务需求。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 261

如何利用air780e与stm32c8c6进行通信实现给手机发送一条英文短信的功能?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1237

在GridView中插入新记录的方法(结合DetailsView)

在GridView中插入新记录的方法(结合DetailsView) 注意: 今天在项目中发现,当用下面的方法实现新建功能的时候,不能让gridview允许排序,否则会出错:“数据源不允许排序”! 众所周知,gridview的功能在.netframework2.0版本里是如此的强大。编辑、删除功能结合ajax可以做到无刷新操作数据。但是最令人遗憾的一点就是Gridv

darkread的专栏 4879

通俗范畴论10 泛性质(MD版)

既然泛性质可以在同构意义下唯一确定一个泛构造,那么我们就可以用泛性质来定义泛构造。我们回顾一下已经掌握的泛性质和泛构造。泛性质其实我们并不陌生,始对象和终对象,就是具有泛性质的对象,一个具有“始”的泛性质,一个具有“终”的泛性质。比如始对象,如果一个范畴里面有始对象,它到所有对象都有且只有一个态射,这样的对象可能有两个么?嗯,还真可能,但是这两个始对象同构,所以在同构意义下,它们可以看成一个,因此在同构意义下,始对象是唯一的。同理,终对象也一样。同构的始对象。

RockTec的专栏 478

asp.net 2.0中用GRIDVIEW插入新记录

看了下国外某巨牛的BLOG,大概是讲asp.net 2.0中用GRIDVIEW插入新记录的,方法比较特别,但效果一般,故将程序转之,较为简单,不做解释等。 http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">     void CancelButton1_Click(object sender, EventArgs e)    {    

mdot的专栏 1562

层层剖析,让你彻底搞懂Self-Attention、MultiHead-Attention和Masked-Attention的机制和原理

本文内容 本文基于李宏毅老师对 Self-Attention 的讲解,进行理解和补充,并结合Pytorch代码,最终目的是使得自己和各位读者更好的理解Self-Attention 李宏毅Self-Attention链接: https://www.youtube.com/watch?v=hYdO9CscNes PPT链接见视频下方 通过本文的阅读,你可以获得以下知识: 什么是Self-Attention,为什么要用Self-Attention? Self-Attention是如何做的? Self-Atten

iioSnail的博客 2万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

]在GridView中插入新记录

[翻译]在GridView中插入新记录原文发布日期:2007.04.11作者:Bipin Joshi翻译:webabcdGridView控件不允许你插入新记录。 本文中我将举例说明快速解决这个问题的方法。介绍几个月前我写了一篇文章,是讲述一个允许你在DataGrid里添加一条新记录的技巧。 GridView控件不允许你插入新记录。 这种情况下开发人员经常使用如下的技术增加新记录:    ·他们

sqlmlm的专栏 916

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[翻译]在GridView中插入新记录

原文地址:http://www.dotnetbips.com/articles/c1e0ca90-5f5d-47aa-a739-492b562e810a.aspx[原文源码下载][译者改后源码下载] [翻译]在GridView中插入新记录 原文发布日期:2007.04.11作者:Bipin Joshi翻译:webabcdGridView控件不允许你插入新记录。 本文中我将举例说明快速解决这个问题的...

yanhuanwang 445

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Scott Mitchell 的ASP.NET 2.0数据教程之53:从GridView的页脚插入新记录

 本章英文原版及代码下载:http://www.asp.net/learn/dataaccess/tutorial53cs.aspx?tabid=63Scott Mitchell 的ASP.NET 2.0数据教程之53:从GridView的页脚插入新记录导言:正如教程《概述插入、更新和删除数据》里探讨过的一样, GridView, DetailsView和FormView Web控

heker2007的专栏 9830

asp.net 2.0中用GRIDVIEW插入新记录 (转)

asp.net 2.0中用GRIDVIEW插入新记录 (转) 看了下国外某巨牛的BLOG,大概是讲asp.net 2.0中用GRIDVIEW插入新记录的,方法比较特别,但效果 一般,故将程序转之,较为简单,不做解释等。 <%@ Page Language="C#" ClassName="Default_aspx" %> ...

weixin_30558305的博客 78
上一篇: 实现在GridView中新增行
下一篇: hibernate数据类型与OR映射
mounting
博客等级 码龄19年 4粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值