主题:DataGrid刷新问题,修改一行后刷新!!!鞠躬了
ztong
[专家分:10] 发布于 2006-01-20 18:03:00
本人绑定一个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个回复)
沙发
goodsirliu [专家分:180] 发布于 2006-01-20 20:46:00
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,不知道代码有没有语法错误,你可以先调试一下,多添加几个断点,看看变量的值是否正常
板凳
ztong [专家分:10] 发布于 2006-01-20 21:24:00
程序的执行是没有问题的,当在网页上直接刷新时显示正确,只是如何实现不使用F5就能够直接刷新呢?谢谢了
3 楼
goodsirliu [专家分:180] 发布于 2006-01-20 21:51:00
那得把你这个网页的其他代码(比如Page_Load事件)传上来看看
4 楼
goodsirliu [专家分:180] 发布于 2006-01-20 21:57:00
我知道原因了,一定是你的Page_load事件中没有使用if !Ispostback就进行了数据绑定,请使用以下的代码
if !Ispostback{
this.OpenDB1();
}
应该可以解决
5 楼
ztong [专家分:10] 发布于 2006-01-21 21:18:00
但是我在page_load里添加此句了,没有反应,我试了一下在最后添加语句:
Response.Redirect("webform1.aspx");
回到原句,发现的确刷新了,而且实现了数据的更新,删除和修改都对,只是在DataGrid里checkbox中已经选定的项目里的√没有了,如何保证在DataGrid里checkbox中已经选定的项目里的√也存在呢?谢谢了!!
6 楼
redsky9919 [专家分:570] 发布于 2006-01-24 12:41:00
不要用Response.Redirect("webform1.aspx");
这样的意思是和你 从另外一个页面到这个页面的意思是一样的,
应该在点按钮后从新到数据库读
然后绑定到DataGrid
如:
DataBindClass//到数据库读
DataGrid.DataSource = "到数据库读到的数据";
DataGrid.DataBind();
7 楼
redsky9919 [专家分:570] 发布于 2006-01-24 12:42:00
意思是修改后重新读一变数据库,或内存里的数据表
8 楼
ztong [专家分:10] 发布于 2006-01-24 16:53:00
我觉得我的程序上已经使用数据表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 楼
redsky9919 [专家分:570] 发布于 2006-01-24 18:16:00
DataBindClass
意思是到数据库读取数据的函数啊
,我帮你看下下程序吧
10 楼
redsky9919 [专家分:570] 发布于 2006-01-24 18:21:00
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();
}
这样看看
我来回复