主题:  datagrid刷新问题???

ztong

职务:普通成员
等级:1
金币:0.0
发贴:129
#12006/1/21 21:28:45
本人在datagrid里添加checkbox,然后进行添加一行,删除一行,更新一行的操作。发现添加完全可以执行,而删除和更新时datagrid没有变化,当然相连接的数据库是变化了的,而且也重新绑定了,如果刷新页面,或在最后添加语句:
Response.Redirect("webform1.aspx";
回到原句,发现的确刷新了,而且实现了数据的更新,删除和修改都对,只是在DataGrid里checkbox中已经选定的项目里的√没有了,而且一些textbox中的数据也消失了,如何保证在DataGrid里checkbox中已经选定的项目里的√也存在,textbox中的数据也不变呢?谢谢了!!



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#22006/1/23 15:00:29
这种情况最好不要用Redirect,需要重新绑定数据库
可以写一绑定数据库的过程,在执行更新后,再执行一次这个过程。
删除操作还需要判断删除后该页是否存在
try
{
    DataBoundList();
}
catch
{
    Datagrid1.CurrentPageIndex--;
    DataBoundList();
}
如果需要保存这些标记,应该记下当前页号和每行编辑后变化,在重新绑定后,把这些变化再标记上去。


非常大鱼

ztong

职务:普通成员
等级:1
金币:0.0
发贴:129
#32006/1/23 16:35:55
本人绑定一个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();
}

public void delete_Click(object sender, System.EventArgs e)
    {
    this.delete.Attributes["onclick"]="javascript:return confirm('你确认要删除吗?');";
    string sql14 = "select * from 材料信息全 where 材料名称='"+clmctextbox.Text+"'";
    conn.open();
    SqlCommand cmd14=new SqlCommand(sql14,conn);
    SqlDataReader dr=cmd14.ExecuteReader();
    if(!dr.Read())
    {
    dr.Close();
    conn.Close();
    Response.Write("<script>alert('该材料名称不存在');</script>";
    }
    else
    {
    dr.Close();
    string tt=clmctextbox.Text.Trim();
    if(tt==""
    {
    conn.Close();
    Response.Write("<script>alert('材料名称不能为空');</script>";
    }
    else
    {
    /******************删除信息*************************/
    string sql12="delete from 材料信息 where 材料名称='"+clmctextbox.Text+"'";
    SqlCommand cmd12 = new SqlCommand(sql12,conn);
    cmd12.ExecuteNonQuery();    
    conn.Close();
this.OpenDB1();
    Response.Write("<script>alert('您的信息已经修改!请选择其他操作!');</script>";
}
}
}

操作之后发现,点击add_Click()时,能够在DataGrid也就是materials里添加新的一行数据,而且DataGrid也更新,无论添加多少行都行,但是在选择一行后,修改数据,点击modify_Click,相连接的数据库已经更改了,但是DataGrid也就是materials没有更新,仍旧是原有的形状.这是怎么回事.如果说有问题,那么在add_Click中materials就应该不刷新,可是在add_Click中刷新了,但是在modify_Click中又不刷新,我也实现新的捆绑了,怎么回事呢?
那么如何实现让所有功能实现呢?????



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#42006/1/23 18:38:03
检查一下是否执行了OpenDB1()这个过程,是语句问题还是压根没触发这二个点击事件。
由于vs2003问题,发觉vs会自动丢掉一些事件,也就是在InitializeComponent()事件中,把事件代码给删除了,特别有时在DW或外部编辑器编辑后,常有这种事发生。
如果一切正常,是不可能不会刷新的,我从来没发生不刷新现象。


非常大鱼

ztong

职务:普通成员
等级:1
金币:0.0
发贴:129
#52006/1/24 10:11:19
我也奇怪,按理说不应该发生不更新现象,可是当我刷新一下时,结果是正确的,而且我在每一个命令中都添加                Response.Write("<script>alert('您的信息已经修改!请选择其他操作!');</script>";语句,但是虽然执行,但是并不显示出来,很奇怪!
而且当我添加语句
                da.Update(ds);
                ds.AcceptChanges();
后发现执行正确,非常高兴,可是运行几次后,又出现不能刷新的问题,会不会是我的数据库出现的问题呢?如果是,会是什么问题呢?
谢谢了!



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#62006/1/25 0:16:07
this.delete.Attributes["onclick"]="javascript:return confirm('你确认要删除吗?');";
不要放在事件中,可以放在Page_Load事件中

js的Write可改为:
Page.RegisterClientScriptBlock("ShowEditMessage", "<script>alert('您的信息已经修改!请选择其他操作!');</script>");

代码比较乱,并且加了js,测试可以用减法,注释一下不是最主要的语句,只保留编辑语法及绑定句子,然后逐条加上去,看问题出在哪。


非常大鱼