Infragistics UltraWebGrid 控件的增删改查(CRUD)之非Batch更新操作

本文主要是介绍Infragistics UltraWebGrid 控件的增删改查(CRUD)之非Batch更新操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Infragistics UltraWebGrid 控件的增删改查(CRUD)

之前没怎么接触UltraWebGrid控件,以为它与普通的GridView控件差不多,不知道是不是我先天迟钝呢,还是怎样,为了弄它这个增删改功能,到处百度、Google,关于这个的资料有是有,但很少,而且大部分是英文的,虽然Infagistics本身也提供Samples来参考,但看着那一大堆非我想要的代码示例,让我觉得很无奈,因为我用的V8.2版本,与现在最新的2010版本也有些差异,它网站上的help大都以最新的为例,哈哈,无奈之下,还是认真地啃下文档的英文解说,然后再与本身的实例做对比,经过一个星期的测试比较,终于将增删改的功能实现出来。为了给广大同志们一个help,少走些弯路,现在将这个功能的实现总结出来:

实现增删改查(CRUD)在UltraWebGrid中主要分为两种类型,一种是单个(Single)的实现,它的意思就是你修改或是增加或是删除都是以为一个为单位进行Postback,返回到服务器中,更新到数据库。另一种呢是在前面单个(Single)的基础上提出来的,就是批量更新(Update Batch),在批量更新条件下,你要在自己的Web Form程序中添加一个Run at Server的Button按钮,不用设置Button按钮的事件,它只是起到一个按钮作用,实际什么都不做的。

好的,我们来看看实现CRUD功能的大概步骤:

1、设置数据源,这里我们用DataSet数据集来设置数据源,并利用它的向导来设置各种参数(包括SQL)

2.在CS文件中写好各种事件的处理代码,如UpdateRow,DeleteRow等等

3.在Aspx文件中选中UltraWebGrid,在属性中转换到事件标签,然后将相关事件关联起来,如UpdateRowEventHander关联到我们在CS写的UpdateROW事件中,其实就是在这里让我蒙了好长时间,我当时就不明白它怎样将事件代码关联起来的,后来才弄明白它UltraWebGrid控件本身提供这样的事件控制机制,而我们要做的是写好事件的代码,然后在设计面板中将事件与事件代码关联起来就行了,很是简单,当然习惯了自己手写控制一切有时候思维还是转不过来啊。

以下呈现出来的是具体的操作步骤:(以下为非批量Batch的单个Single的CRUD实现,部分格式参照文档的格式,因为文档的格式容易让人思路清晰明了)

1、新建一个WebSite站点(当然,你也可以不新建,直接在自己的项目上应用,但为了测试成功与否,还是建议阁下这样做,不会建立站点?在vs中的文件->新建->网站)

2、再把你的数据库文件复制到项目的App_Data文件夹下,然后回到VS平台,在解决方案资源管理器选项卡下,右击App_Data文件夹,选择添加-》现有项,找到刚才在App_Data文件夹下的数据库文件(我这里是LinqDB.mdf,以下的说明都以这个为蓝本,当然你也可以换成你的数据库文件,我这里只是做示例,噢,忘记废话一点了,要能正常使用这个数据库文件,你要安装有Sql Server才行喔,我这里是SQLServer2008sp1版本,再八卦一下,如果你不用数据库文件的话,也可以直接访问sql server里面的现存的数据库),点击“添加”按钮即可。

clip_image001[5]

3、创建数据库的数据访问层,右击解决方案的工程节点,选择“添加”-》新建项,在模板栏中,我们选择“数据集”

clip_image003[16]

此时注意,在“名称”一栏中,默认为“DataSet1.xsd”,当然你也可以自己命名,但要记住文件名(这里是DataSet1),下面写代码时会用到,然后点添加即可(注意,有时候你添加这个数据集时,会出现提示说一般将数据集放在App_Code文件夹下,这时选择”是“)

在DataSet设计模式下,在工具箱中,拖动TableAdapter控件到数据集里面,

clip_image005[9]

此时会出面“TableAdapter配置向导”,此时向导会自己搜索已存在的数据库,可能也存在没有找到或是空白的情况,这时你要自己新建连接,点击右边的“新建连接”按钮,新建连接我就不说了啊。下一步吧

clip_image007[6]

一般此时要求你要选择客串连接的名称,这里默认是数据库名+ConnectionString,当然你也可以自己命名,到时使用连接字符串时你记住就行了。这里的是LinqDBConnectionString,下一步。

clip_image008[8]

选择命令类型,默认“使用SQL语句”,下一步

clip_image009[6]

到了“输入SQL语句”,点击“高级选项”

clip_image011[6]

选择“生成Insert,Update,Delete语句”,点确定,再点查询生成器

clip_image012[13]

查询生成器会找到LinqDB数据库的表集,选中你要操作的表,点添加,这里是Category表,添加后,点关闭,然后选择你要查询的属性(字段)自动生成SQL语句,当然你也可以在下面的SQl语句文本框中手写语句,这里选择所有列(这里一定要保证你所查询的列中有主键,这里的主键是ID,至于为什么,下面会提到), clip_image014[6]

可以在下面的“执行查询”来看效果,

clip_image016[7]

点确定,在这里默认Fill,GetData方法,直接下一步,

clip_image018[7]

然后,自动的操作已经列出来了

clip_image020[6]

点完成,这时会回到dataset设计器里面

clip_image021[7]

看到这个界面的时候,你已经完成很大一部分工作了,但这时为了我们实现更新数据时,还要添加一个方法,在“CategoryTableAdapter”右击,点击“添加查询”,

clip_image023[7]

与前面的有点类似,使用SQL语句,下一步,

clip_image025[7]

默认Select(返回行),下一步,

clip_image027[7]

出现查询生成界面,我们手写SQL语句,改为如下

clip_image028[7]

即添加Where ID=@ID语句,这里主键是ID,所以添加ID,为什么这样做呢,是因为在你修改还有删除等等操作,在客户端定位时,如果返回到数据库里面?肯定是使用主键嘛,所以,在刚才配置的时候我说在查询列时一定要保证有主键,不然你更新不了,@ID在这里只是参数。点下一步,

在生成的方法中与之前的不同,都有by后缀,即FillBy,GetDataBy,我们这里改为FillByID,GetDataByID(为什么要改?可以不改的,这里只是为了好记)

clip_image029[8]

点下一步,再点完成

clip_image030[7]

看到没?已经出现第二个方法了。

至此,数据层已经配置好了。

4.在Default.aspx文件中添加Ultrawebgrid控件,出现Design向导,直接OK默认就行了(这里只是展示数据操作,界面设计的话自己灵活处理)。

5.打开Default.aspx.cs文件,添加必要的引用,删除掉已经存在的using引用,添加如下引用:

clip_image031[4]

特别是最后一个引用,using DataSet1TableAdpters, DataSet1就是之前要你记住的数据集文件名了再加上TableAdpters,即DataSet1+TableAdpters就可以引用我们之前第三步骤所做的数据层了。

6. 写代码

public partial class _Default : System.Web.UI.Page

{

DataSet1 theds3=new DataSet1();///实例化数据集

CategoryTableAdapter theTableAdapter = new CategoryTableAdapter();

/实例化适配器,在Dataset1中有多少个表,就有多个个这样的适配器,在这里现在只有一个Category表,所以只有这个CategoryTableAdapter适配器,这些适配器都是表名+TableAdapter构成的,这些适配器用来做什么的呢?就是用来执行CRUD到数据库中,不然你在客户端所有操作都是徒劳的

protected void Page_Load(object sender, EventArgs e)

{///在Page_Load添加如下代码

if (!Page.IsPostBack)

{

this.GetData();初始数据

}

}

public void GetData()初始数据函数

{

this.UltraWebGrid1.Rows.Clear();清空UltraWebGrid中的显示

this.theTableAdapter.Fill(theds3.Category);///将数据库Category表中的数据填充到数据集theds3中

this.UltraWebGrid1.DataSource = theds3.Category;///以下是将控件UltraWebGrid的数据源绑定到表中

this.UltraWebGrid1.DataBind();

}

/以下是写删除行代码,注意函数名称和参数啊

protected void UltraWebGrid1_DeleteRow(object sender, RowEventArgs e)

{

设置主键,通过它来控制是哪行被删除了

int thePrimaryKey = (int)e.Row.Cells.FromKey("ID").Value;

///然后操作返回到数据集表中

this.theTableAdapter.FillByID(theds3.Category, thePrimaryKey);

/声明表的一行,初始为null

DataSet1.CategoryRow theCategory = null;

以下if作用不明显

if (theds3.Category.Count > 0)

{

theCategory = theds3.Category[0];

}

try

{

if (theCategory != null)如果数据行存在

{

theCategory.Delete();///删除之

this.theTableAdapter.Update(theds3.Category);/更新到数据库

}

}

catch (Exception ex)看看有没异常,有就抛出异常

{

this.lblerror.Text = ex.Message;

this.GetData();

}

}

//以下是更新操作,包括修改更新和增加行更新

protected void UltraWebGrid1_UpdateRow(object sender, RowEventArgs e)

{

switch (e.Row.DataChanged)/查看引发事件的行的状态,是增加的还是修改过的

{

case DataChanged.Added:

this.InsertRecord(e.Row);

break;

case DataChanged.Modified:

this.UpdateRecord(e.Row);

break;

}

}

//增加行数据

private void InsertRecord(UltraGridRow theGridRow)

{

DataSet1.CategoryRow theCategory;///声明一(表)行

theCategory = theds3.Category.NewCategoryRow();//实例化,注意这里,要实例化成你要操作的表的行数据

theCategory.ID = (int)theGridRow.Cells.FromKey("ID").Value;///对应各数据项的内容,哈哈,这里面的格式,自己研究,也可以参考我的这里的代码,基本上一样,而且也容易懂

theCategory.Name = theGridRow.Cells.FromKey("Name").Value.ToString();

theCategory.ParentID = (int)theGridRow.Cells.FromKey("ParentID").Value;

/向数据集中相应的表,这里是Category表,增加一行

theds3.Category.AddCategoryRow(theCategory);

/更新到数据库

this.theTableAdapter.Update(theds3.Category);

theGridRow.Cells.FromKey("ID").Value = theCategory.ID;

}

///更新行数据,即是修改过的行

private void UpdateRecord(UltraGridRow theGridRow)

{

/获取主键,以标识是哪条记录修改了

int thePrimaryKey = (int)theGridRow.Cells.FromKey("ID").Value;

this.theTableAdapter.FillByID(theds3.Category, thePrimaryKey);

//同上

DataSet1.CategoryRow theCategory = null;

if (theds3.Category.Count > 0)

{

theCategory = theds3.Category[0];

}

//更新到数据集中

if (theCategory != null)

{

theCategory.Name = theGridRow.Cells.FromKey("Name").Value.ToString();

theCategory.ParentID = (int)theGridRow.Cells.FromKey("ParentID").Value;

theCategory.ShowOrder = (int)theGridRow.Cells.FromKey("ShowOrder").Value;

}

将数据集中的修改更新到数据库中

this.theTableAdapter.Update(theds3.Category);

}

}

7.写完代码后,转到Default.aspx页面,选中UltraWebGrid控件,在属性栏中,点击闪电按钮转到事件标签下,将DeleteRow关联到Ultrawebgrid1_DeleteRow函数中去,同理UpdateRow关联到UltraWebGrid1_UpdateRow中去

clip_image033[8]

clip_image035[7]

至此,所有步骤已经完毕了,现在就可以调试下,运行效果啊.

转载请保留原文地址http://www.cnblogs.com/lusir/archive/2010/08/01/1790029.html

转载于:https://www.cnblogs.com/lusir/archive/2010/08/01/1790029.html

这篇关于Infragistics UltraWebGrid 控件的增删改查(CRUD)之非Batch更新操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/210718

相关文章

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

JavaScript DOM操作与事件处理方法

《JavaScriptDOM操作与事件处理方法》本文通过一系列代码片段,详细介绍了如何使用JavaScript进行DOM操作、事件处理、属性操作、内容操作、尺寸和位置获取,以及实现简单的动画效果,涵... 目录前言1. 类名操作代码片段代码解析2. 属性操作代码片段代码解析3. 内容操作代码片段代码解析4.

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

Python使用asyncio实现异步操作的示例

《Python使用asyncio实现异步操作的示例》本文主要介绍了Python使用asyncio实现异步操作的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录1. 基础概念2. 实现异步 I/O 的步骤2.1 定义异步函数2.2 使用 await 等待异

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与