回 帖 发 新 帖 刷新版面

主题:DataGrid刷新问题,修改一行后刷新!!!鞠躬了

本人绑定一个DataGrid,其中materials是DataGrid的名,conn代表连接数据库时连接open与否.
private void OpenDB1()
{
try
{
   string sql="select * from 材料信息全";
   conn.open();
   SqlDataAdapter da=new SqlDataAdapter(sql,conn);
   DataSet ds=new DataSet();
   da.Fill(ds,"A");
   materials.DataSource=ds.Tables["A"];                    
   materials.DataBind();
   conn.Close();
   }
  catch(Exception)
  {
   Response.Write("登录超时!");
   string sql="select * from 材料信息全";
    conn.open();
    SqlDataAdapter da=new SqlDataAdapter(sql,conn);
    DataSet ds=new DataSet();
    da.Fill(ds,"A");
    materials.DataSource=ds.Tables["A"];
    materials.DataBind();
    conn.Close();
    Response.End();
   }
}


public void add_Click(object sender, System.EventArgs e)
{
string sql4 = "select * from 材料信息全 where 材料名称='"+clmctextbox.Text+"'";
  conn.open();
  SqlCommand cmd=new SqlCommand(sql4,conn);
  SqlDataReader dr=cmd.ExecuteReader();
  if(dr.Read())
{
   Response.Write("<script>alert('该材料名称已经存在');</script>");
   dr.Close();
   conn.Close();
}
else
{
 dr.Close();
  string tt=clmctextbox.Text.Trim();
  if(tt=="")
  {
   Response.Write("<script>alert('材料名称不能为空');</script>");
   conn.Close();
  }
  else
  {
   string sql12="insert into 材料信息([材料名称],[交件人],[收件日期],[收件人],[页数],[份数]) values(";
sql12+="'"+clmctextbox.Text+"','"+jjr.Text+"','"+sjrq.Text+"','"+sjr.Text+"','"+ys.Text+"','"+fs.Text+"')";
SqlCommand cmd12 = new SqlCommand(sql12,conn);
cmd12.ExecuteNonQuery();
conn.Close();
  }
}
  this.OpenDB1();    
}


public void modify_Click(object sender, System.EventArgs e)
{
string sql41 = "select * from 材料信息全 where 材料名称='"+clmctextbox.Text+"'";
  conn.open();
  SqlCommand cmd41=new SqlCommand(sql41,conn);
  SqlDataReader dr=cmd41.ExecuteReader();
  if(!dr.Read())
  {
   Response.Write("<script>alert('该材料名称不存在');</script>");
   dr.Close();
   conn.Close();
  }
  else
{
 dr.Close();
  string tt=clmctextbox.Text.Trim();
  if(tt=="")
{
  Response.Write("<script>alert('材料名称不能为空');</script>");
  conn.Close();
}
else
{
  string sql31="update 材料信息 set 材料名称='"+clmctextbox.Text+"',交件人='"+jjr.Text+"',收件日期='"+sjrq.Text+"',";
  sql31+="收件人='"+sjr.Text+"',页数='"+ys.Text+"',份数='"+fs.Text+"' where 材料名称='"+clmctextbox.Text+"'";
  SqlCommand cmd11 = new SqlCommand(sql31,conn);
  cmd11.ExecuteNonQuery();        
   conn.Close();
   Response.Write("<script>alert('您的信息已经修改!请选择其他操作!');</script>");
   }
  }
this.OpenDB1();
}
操作之后发现,点击add_Click()时,能够在DataGrid也就是materials里添加新的一行数据,而且DataGrid也更新,无论添加多少行都行,但是在选择一行后,修改数据,点击modify_Click,相连接的数据库已经更改了,但是DataGrid也就是materials没有更新,仍旧是原有的形状.这是怎么回事.如果说有问题,那么在add_Click中materials就应该不刷新,可是在add_Click中刷新了,但是在modify_Click中又不刷新,我也实现新的捆绑了,怎么回事呢?
有人说是计算机缓存保持原有状态,必须删除缓存内容才行,我不知道如何实现???????可是我在add_Click中可以添加新的一行呀????
有人说可能是系统默认只使用add_Click按钮进行绑定,那么如何实现解除默认,让所有功能实现呢?????
而且不知道为什么
Response.Write("<script>alert('您的信息已经修改!请选择其他操作!');</script>");虽然执行,但是并不弹出窗口显示,什么原因呢?
太多问题了,望大侠帮忙啊????

回复列表 (共10个回复)

沙发

1、首先,要弹出窗口,建议使用一个Literal控件,把脚本设置成其Text属性,例如Literal.text="<script>脚本</script>".即使要使用Response.write,必须放在最后一步执行,如果不放最后一行,在用户界面上显示数据时,这一句早就执行了,当然看不到弹出窗口。
2、其次,modify_click过程应该没有什么问题(但是“if(tt=="")”这一句建议放在前面提前判断,避免不必要的数据访问)。
3、在使用DataAdapter时不需要使用conn.open和close,因为它会自动检测是否打开连接,并决定是否关闭连接。
4、我认为真正的问题很可能是在OpenDB1这个过程,你的Try语句问题很大,没有办法发现错误,我认为应该把错误处理的范围减小,请按下面的代码调试看一下,再分析原因
private void OpenDB1()
{
   string sql="select * from 材料信息全";
   SqlDataAdapter da=new SqlDataAdapter(sql,conn);
   Datatable ds=new Datatable();
   try{
       da.Fill(ds);
       materials.DataSource=ds;                    
       materials.DataBind();
    }
   catch(Exception){
       Response.Write("登录超时!");
    }  
}

因为我习惯使用VB.NET,不知道代码有没有语法错误,你可以先调试一下,多添加几个断点,看看变量的值是否正常

板凳

程序的执行是没有问题的,当在网页上直接刷新时显示正确,只是如何实现不使用F5就能够直接刷新呢?谢谢了

3 楼

那得把你这个网页的其他代码(比如Page_Load事件)传上来看看

4 楼

我知道原因了,一定是你的Page_load事件中没有使用if !Ispostback就进行了数据绑定,请使用以下的代码
if !Ispostback{
   this.OpenDB1();
}
应该可以解决

5 楼

但是我在page_load里添加此句了,没有反应,我试了一下在最后添加语句:
Response.Redirect("webform1.aspx");
回到原句,发现的确刷新了,而且实现了数据的更新,删除和修改都对,只是在DataGrid里checkbox中已经选定的项目里的√没有了,如何保证在DataGrid里checkbox中已经选定的项目里的√也存在呢?谢谢了!!

6 楼

不要用Response.Redirect("webform1.aspx");
这样的意思是和你 从另外一个页面到这个页面的意思是一样的,
应该在点按钮后从新到数据库读
然后绑定到DataGrid
如:
DataBindClass//到数据库读
DataGrid.DataSource = "到数据库读到的数据";

DataGrid.DataBind();

7 楼

意思是修改后重新读一变数据库,或内存里的数据表

8 楼

我觉得我的程序上已经使用数据表A了
string sql="select * from 材料信息全";
   conn.open();
   SqlDataAdapter da=new SqlDataAdapter(sql,conn);
   DataSet ds=new DataSet();
   da.Fill(ds,"A");/******/
   materials.DataSource=ds.Tables["A"];                    
   materials.DataBind();
   conn.Close();

DataBindClass是什么呢?

9 楼

DataBindClass
意思是到数据库读取数据的函数啊
,我帮你看下下程序吧

10 楼

private void OpenDB1()
{
try
{
   string sql="select * from 材料信息全";
   conn.open();
   SqlDataAdapter da=new SqlDataAdapter(sql,conn);
   DataSet ds=new DataSet();
   da.Fill(ds,"A");
   materials.DataSource=ds.Tables["A"];                    
   materials.DataBind();
   conn.Close();
   }
  catch(Exception)
  {
   Response.Write("登录超时!");
   string sql="select * from 材料信息全";
    conn.open();
    SqlDataAdapter da=new SqlDataAdapter(sql,conn);
    DataSet ds=new DataSet();
    da.Fill(ds,"A");
    materials.DataSource=ds.Tables["A"];
    materials.DataBind();
    conn.Close();
    Response.End();
   }
}


public void add_Click(object sender, System.EventArgs e)
{
string sql4 = "select * from 材料信息全 where 材料名称='"+clmctextbox.Text+"'";
  conn.open();
  SqlCommand cmd=new SqlCommand(sql4,conn);
  SqlDataReader dr=cmd.ExecuteReader();
  if(dr.Read())
{
   Response.Write("<script>alert('该材料名称已经存在');</script>");
   dr.Close();
   conn.Close();
}
else
{
 dr.Close();
  string tt=clmctextbox.Text.Trim();
  if(tt=="")
  {
   Response.Write("<script>alert('材料名称不能为空');</script>");
   conn.Close();
  }
  else
  {
   string sql12="insert into 材料信息([材料名称],[交件人],[收件日期],[收件人],[页数],[份数]) values(";
sql12+="'"+clmctextbox.Text+"','"+jjr.Text+"','"+sjrq.Text+"','"+sjr.Text+"','"+ys.Text+"','"+fs.Text+"')";
SqlCommand cmd12 = new SqlCommand(sql12,conn);
cmd12.ExecuteNonQuery();
conn.Close();
  }
}
  this.OpenDB1();    
string sql="select * from 材料信息全";
   conn.open();
   SqlDataAdapter da=new SqlDataAdapter(sql,conn);
   DataSet ds=new DataSet();
   da.Fill(ds,"A");
   materials.DataSource=ds.Tables["A"];                    
   materials.DataBind();
   conn.Close();
}


public void modify_Click(object sender, System.EventArgs e)
{
string sql41 = "select * from 材料信息全 where 材料名称='"+clmctextbox.Text+"'";
  conn.open();
  SqlCommand cmd41=new SqlCommand(sql41,conn);
  SqlDataReader dr=cmd41.ExecuteReader();
  if(!dr.Read())
  {
   Response.Write("<script>alert('该材料名称不存在');</script>");
   dr.Close();
   conn.Close();
  }
  else
{
 dr.Close();
  string tt=clmctextbox.Text.Trim();
  if(tt=="")
{
  Response.Write("<script>alert('材料名称不能为空');</script>");
  conn.Close();
}
else
{
  string sql31="update 材料信息 set 材料名称='"+clmctextbox.Text+"',交件人='"+jjr.Text+"',收件日期='"+sjrq.Text+"',";
  sql31+="收件人='"+sjr.Text+"',页数='"+ys.Text+"',份数='"+fs.Text+"' where 材料名称='"+clmctextbox.Text+"'";
  SqlCommand cmd11 = new SqlCommand(sql31,conn);
  cmd11.ExecuteNonQuery();        
   conn.Close();
   Response.Write("<script>alert('您的信息已经修改!请选择其他操作!');</script>");
   }
  }
this.OpenDB1();
string sql="select * from 材料信息全";
   conn.open();
   SqlDataAdapter da=new SqlDataAdapter(sql,conn);
   DataSet ds=new DataSet();
   da.Fill(ds,"A");
   materials.DataSource=ds.Tables["A"];                    
   materials.DataBind();
   conn.Close();
}
这样看看

我来回复

您尚未登录,请登录后再回复。点此登录或注册