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

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

MySQL表空间结构详解表空间到段页操作

《MySQL表空间结构详解表空间到段页操作》在MySQL架构和存储引擎专题中介绍了使用不同存储引擎创建表时生成的表空间数据文件,在本章节主要介绍使用InnoDB存储引擎创建表时生成的表空间数据文件,对... 目录️‍一、什么是表空间结构1.1 表空间与表空间文件的关系是什么?️‍二、用户数据在表空间中是怎么

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2