关闭

插入数据并及时显示问题

432人阅读 评论(0) 收藏 举报

关于数据绑定并及时显示问题,这种问题老是被忘记掉,所以现在在这里把可能出现的一些原因写出来,分析一下,以便留着自己以后看,并且也可以供大家参考,遇到类似的情况的时候,引以为戒.

问题如下:

添加一条记录后,重新绑定,为什么还是要延迟一次显示

分析如下:

主要这个问题是由于未在插入(更新,删除)数据的时候及时进行绑定,这样的话,会导致绑定早于插入,这是我用断点来进行跟踪所得到的结论.

一定要记住插入,删除,修改的时候,要同时进行次绑定,这是防止出现这种错误的最好办法

下面是一个例子

数据库结构:

access数据库:

字段:

uid 自动编号

uname 文本

cs文件代码:

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;

public partial class Test : System.Web.UI.Page
{
    
static int i;
    
protected void Page_Load(object sender, EventArgs e)
    {
        
if (!Page.IsPostBack)
        {
            i 
= 0;
           
        }
        
if(Page.IsPostBack)
        
//设置断点的地方,在回发的时候执行断点
        Response.Write(i++); 
        
/*不管是否回发都执行此绑定,当然如果下面在插入和更新
        ,删除后都已经执行了绑定,那么这里是否有绑定都是可以的
*/
        dltBind();
        
    }
    
//绑定控件
    protected void dltBind() 
    {
        OleDbConnection conn 
= new OleDbConnection();
        conn.ConnectionString 
= ConfigurationSettings.AppSettings["conStr"]+Server.MapPath("app_Data/TestData.mdb");
        OleDbCommand comm 
= conn.CreateCommand();
        comm.CommandText 
= "select * from TestTable";
        conn.Open();
        OleDbDataReader dr;
        dr
=comm.ExecuteReader();
        
//有连接的DataList绑定
        dltTest.DataSource = dr;
        dltTest.DataBind();
        dr.Dispose();
        conn.Close();

    }
    
protected void btnInsert_Click(object sender, EventArgs e)
    {
        
        InsertData(
this.txtName.Text);
        
//这里是最关键的地方,出现无法进行及时更新,就是这里的问题
        
//如果没有dltBind(),那么由于它的执行步骤是先pageLoad再进行插入的
        
//这样的话就算你在pageLoad当中有了dltBind();这个动作,也是于事无补
        
//绑定对它来说根本不起什么作用,这是由于你还未将数据插入数据库,也就是还未执行btnInsert的点击事件
        
//步骤:
        
//Page_Load方法--->dltbind方法--->btnInsert_Click方法,这样的绑定就只会是比插入先执行,因此会出现如下的数据
        
//数据库中数据个数 客户端界面显示的数据个数
        
//      1                   0
        
//      2                   1
        
//      3                   2           
        
//      4                   3
        
//由此数据就可以看出在执行这种绑定的时候都是比数据库晚了一步骤,当这里有了dltBind()
        
//这是对数据进行了一次提交,及时的对数据进行了一次绑定,因此所得到的数据都是新的数据
        
//由此要记住如果想要及时对数据进行更新显示,那么一定要在进行"删除,更新,插入"的时候同时对相应的控件进行一次绑定
        dltBind();
    }
    
//插入数据
    protected void InsertData(string name) 
    {
        OleDbConnection conn 
= new OleDbConnection();
        conn.ConnectionString 
= ConfigurationSettings.AppSettings["conStr"+ Server.MapPath("app_Data/TestData.mdb");
        OleDbCommand comm 
= conn.CreateCommand();
        comm.CommandText 
= string.Format("insert into TestTable (uname) values ('{0}')",name);
        
try
        {
            conn.Open();
            comm.ExecuteNonQuery();
            conn.Close();
        }
        
catch (Exception err)
        {
            message.InnerHtml 
= "<font color=red>" + err.Message + "</font>";
        }
        
finally
        {
            
if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }
        }
    }
    
//删除数据库中的数据
    protected void btnDelete_Click(object sender, EventArgs e)
    {
        OleDbConnection conn 
= new OleDbConnection();
        conn.ConnectionString 
= ConfigurationSettings.AppSettings["conStr"+ Server.MapPath("app_Data/TestData.mdb");
        OleDbCommand comm 
= conn.CreateCommand();
        comm.CommandText 
= "delete from TestTable ";
        conn.Open();
        comm.ExecuteNonQuery();
        conn.Close();
        dltBind();
    }
}

 

aspx文件代码:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>无标题页</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
    
<center>
        
&nbsp;<table style="width: 637px; height: 222px">
            
<tr>
                
<td>
                    名称:
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
                    
<asp:Button ID="btnInsert" runat="server" OnClick="btnInsert_Click" Text="插入" />
                    
<asp:Button ID="btnDelete" runat="server" OnClick="btnDelete_Click" Text="删除数据库所有记录" /><span id="message" runat="server"></span></td>
            
</tr>
            
<tr>
                
<td>
       
<asp:DataList ID="dltTest" runat="server">
        
<ItemStyle BackColor="AliceBlue" />
        
<ItemTemplate>
            编号:
<%#DataBinder.Eval(Container.DataItem,"uid"%><br />
            名称:
            
<%#DataBinder.Eval(Container.DataItem,"uname"%>       
        
</ItemTemplate>
        
</asp:DataList>
                 
</td>
            
</tr>
        
</table>
     
</center>
     
</div>
    
</form>
</body>
</html>

这个问题感觉可能比较低级,但是很容易就犯了,写这个警告自己,不要犯相同的错误,也仅代表个人看法,如果有错误,还请见谅

 

 

0
0
查看评论

输入一组整数,找出这组数中最大值与最小值的下标,在主调函数中输出最大值和最小值,用指针实现。

1、         输入一组整数,找出这组数中最大值与最小值的下标,在主调函数中输出最大值和最小值;
  • CSDN_buyi
  • CSDN_buyi
  • 2017-09-26 17:16
  • 407

项目工作过程中遇到棘手问题是埋头钻研?还是及时向领导汇报情况?

在项目中,作为项目组成员难免会遇到问题。遇到问题时,有些人就会想:“领导挺忙的,就不进行汇报了”,“还是不汇报了吧,领导也许会因为我解决不了这个问题而低看我吧”,“再等等,我再努力努力也许就找到解决方案了”等等。 实际上,这种“瞒着不说”的心态很可能会最终拖累项目进度。你瞒着不说,即耽误了项目进度,...
  • liantingwqn
  • liantingwqn
  • 2016-06-01 10:43
  • 1230

高并发网络架构解决方案分析

高并发网络架构解决方案分析 1:html静态化 2:图片服务器分离 3:数据库集群 4:缓存 5:负载均衡 在Cernet做过拨号接入平台的搭建,而后在Yahoo3721负载搜索引擎前端平台开发,又在猫扑处理过大型社区猫扑大杂烩的架构升级等工作,同时自己接触和开发过不少大...
  • solobear
  • solobear
  • 2014-07-28 01:46
  • 607

中管高校应及时向社会公布巡视整改情况,接受干部群众监督,一个不能少!

中管高校应及时向社会公布巡视整改情况,接受干部群众监督,一个不能少!人民网北京8月25日电,中央纪委监察部网站25日开设专栏,集中公布十八届中央第十二轮巡视整改情况。根据中央统一部署,十八届中央第十二轮巡视对北京大学、清华大学、北京师范大学、中国农业大学、北京航空航天大学、北京理工大学、南开大学、天...
  • yuanmeng001
  • yuanmeng001
  • 2017-08-28 12:44
  • 321

Android 根据sql文件创建数据库并插入数据

因为在开发客户端的时候,服务器端的有写数据是重复的,不需要再去访问服务器的,然后服务器端提供的是一个sql文件,里面包含了数据库和数据,我们这些开发客户端的不可能一行一行的进行手动入库吧?所以我就想到了直接读取sql文件进行创建数据并插入数据好了。 创建DBHelp并继承SQLiteOpenHelp...
  • qianqianyihao
  • qianqianyihao
  • 2014-10-08 15:24
  • 1575

MySQL基础入门—创建数据库并插入数据

新建数据库 首先,我们创建一个数据库,给它一个名字,比如 mysql_ldld 语句格式为 CREATE DATABASE ;,(注意不要漏掉分号 ;),前面的 CREATE DATABASE 也可以使用小写,具体命令为: CREATE DATABASE my...
  • FallingU
  • FallingU
  • 2017-07-19 11:23
  • 295

JSP连接Oracle小程序(创建数据表,插入,显示)

              java.sql.Connection  lConn  =  null;      ...
  • panzi667
  • panzi667
  • 2004-10-13 13:19
  • 2461

InstallShield修改环境变量后不能立即生效的问题

创建一个InstallScript脚本的InstallShield安装程序,在脚本代码中更新环境变量,更新后发现注册表和计算机->属性->高级->环境变量中的变量值都更新了,但是使用命令行(WIN+R,CMD)始终获取不到设置的环境变量。   ...
  • imu2008
  • imu2008
  • 2015-11-15 21:38
  • 413

JSP页面,实现上传图片即时显示效果

function setImagePreview() { var docObj = document.getElementById("doc"); var imgObjPreview = document.getElementById("preview"...
  • catenl
  • catenl
  • 2015-12-12 20:22
  • 1510

工作中及时沟通很重要

任务进行时,分阶段沟通很重要。 比如任务做到三分之一的样子,自己已经能够了解当前程序的相关逻辑,判断它的可扩展性,这时如果向领导汇报一下工作情况,说不定就能纠正下一个步骤的重大错误。
  • chinet_bridge
  • chinet_bridge
  • 2012-12-02 16:28
  • 850
    个人资料
    • 访问:181199次
    • 积分:2469
    • 等级:
    • 排名:第17621名
    • 原创:61篇
    • 转载:46篇
    • 译文:0篇
    • 评论:28条
    文章分类
    最新评论
    网络大本营