模拟一个可编辑的DataGrid

    上一篇文章长篇累牍,不知所云。让我把进度加起来,我们只谈技术。

    有时候你会碰到这样的需求,DataGrid中有若干可编辑项,输入信息,点击添加后,DataGrid就添加一行数据,如此多次重复,直到所有数据添加完,点一个按钮,统一保存到数据库。这样设计的一个优势在于,数据添加的工作可以放到一个事务中。

    我老大说这样的DataGrid是有的,不过最近他没研究过,而我尝试时,如果DataGrid绑定的数据为空DataGrid是无法显示出来的。或许,你想绑定一行空数据,可以达到效果——我会在后面尝试。而我在项目中的做法是,用的表格+DataGrid,这也是我标题取为“模拟”的原因。控件代码:

< table  width ="100%"  border ="1" >
                
< tr  align ="center" >
                    
< td > 编号 </ td >
                    
< td > 姓名 </ td >
                    
< td > 昵称 </ td >
                    
< td > 性别 </ td >
                    
< td > 年龄 </ td >
                    
< td > 操作 </ td >
                
</ tr >
                
< tr >
                    
< td >< asp:TextBox  ID ="Id"  Runat ="server"  Width ="120px" ></ asp:TextBox ></ td >
                    
< td >< asp:TextBox  ID ="Name"  Runat ="server"  Width ="120px" ></ asp:TextBox ></ td >
                    
< td >< asp:TextBox  ID ="NickName"  Runat ="server"  Width ="120px" ></ asp:TextBox ></ td >
                    
< td >
                        
< asp:DropDownList  ID ="Sex"  Runat ="server"  Width ="60px" >
                            
< asp:ListItem  Value ="0" > </ asp:ListItem >
                            
< asp:ListItem  Value ="1" > </ asp:ListItem >
                        
</ asp:DropDownList >
                    
</ td >
                    
< td >< asp:TextBox  ID ="Age"  Runat ="server"  Width ="120px" ></ asp:TextBox ></ td >
                    
< td >< asp:Button  ID ="Save"  Runat ="server" ></ asp:Button ></ td >
                
</ tr >
                
< tr >
                    
< td  colspan ="6" >
                        
< asp:DataGrid  id ="DataGrid1"  runat ="server"  AutoGenerateColumns ="False"  Width ="100%"  ShowHeader ="False" >
                            
< Columns >
                                
< asp:BoundColumn  DataField ="Id"  HeaderText ="编号" ></ asp:BoundColumn >
                                
< asp:BoundColumn  DataField ="Name"  HeaderText ="姓名" ></ asp:BoundColumn >
                                
< asp:BoundColumn  DataField ="NickName"  HeaderText ="昵称" ></ asp:BoundColumn >
                                
< asp:BoundColumn  DataField ="Sex"  HeaderText ="性别" ></ asp:BoundColumn >
                                
< asp:BoundColumn  DataField ="Age"  HeaderText ="年龄" ></ asp:BoundColumn >
                                
< asp:ButtonColumn  Text ="Delete"  HeaderText ="删除" ></ asp:ButtonColumn >
                            
</ Columns >
                        
</ asp:DataGrid >
                    
</ td >
                
</ tr >
            
</ table >

表格上带编辑项,而DataGrid不显示页眉。那么首先,我们来完成数据录入的工作:

Page_Load方法中(加上!IsPostBack()判断),获取数据库表结构,初始化全局变量table(DataTable):

获取数据库表结构(假设数据库表为usermsg),sql为“selec * from usermsg where 1<0”,那么你将得到一个没有数据的表结构,其中包含了你需要的字段,这个方法返回一个DataTable。

接下里一个重要的工作是将DataTable缓存到页面,否则页面上显示的将始终是你最新提交的信息,每次到后台操作数据,都回清空内存,如此,以前保存在内存的数据将丢失。

保存按钮"save"的后台事件中,做如下操作:

1. 获取缓存table = (DataTable)ViewState["Products"]; 利用这个DataTable生成一个DataRow,DataRow row = dt.NewRow(); 接下来,将用户填写的数据保存至DataRow中(row["Id"] = Id.Text;.......如果用到框架,直接一个this.SetControl(row);就可以实现,或者你写一个Page封装一下设置操作,一样的)。

2. 将这个row添加到DataTable中,绑定到DataGrid。

逻辑是这样的:第一次进入页面,获取空表结构,缓存到页面,页面输入数据,点击保存,获取缓存的空表结构,从而得到与之匹配的DataRow,填入数据至DataRow,添加到DataTable,绑定DataTable至DataGrid。如此循环......

DataGrid中,删除按钮方法体中,写删除当前行操作:见上篇Blog,绑定数据。

本身的逻辑很简单,而我在上面也仅仅是描述了它的实现过程,如果有需要源码的,请在Blog评论区留言。

 

ViewState["UserMsg"] = table;添加到Page_Load方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值