如果问题解决了,我再加上100分。问题有点长,请耐心看完函数:
dataDel()          :删除dataGridView1中选中行对应的数据库中记录,仅仅执行一条sql语句
dataRefresh()
{
      DataTable dt;
      string sql = "select dealdate,myvalue,id from mymoney";
      dt = db.queryDataTable(sql);//仅仅执行一条sql语句      dataGridView1.Columns["c1"].DataPropertyName = "dealdate";             //三个列是在form_load中用dataGridView1.Columns.Add设置的
      dataGridView1.Columns["c2"].DataPropertyName = "myvalue";
      dataGridView1.Columns["id"].DataPropertyName = "id";
      dataGridView1.AutoGenerateColumns = false;
      dataGridView1.DataSource = dt;
      dataGridView1.Columns["id"].Visible = false;
}
button_click(...)
{
dataDel();
dataRefresh();
}
现在的问题是:点一次button,dataGridView1的显示没有改变,被删除的那条记录任然存在
再点击一次这个按钮,dataGridView1才显示正常我想问问为什么,是dataRefresh()函数写的有问题吗?

解决方案 »

  1.   

    你最开始DataGridView中的数据是怎么加载进来的?
      

  2.   

    dataRefresh()好像没问题
    发下dataDel()的代码
      

  3.   

    dataDel应该也没问题,问题应该在他最开始加载到dataGridView的方法中,导致他第一次执行butom的时候,dataDel执行无效,而专做了Refresh操作,使DataGridView再次正确的赋上了DataSource,第二次才正确执行。
      

  4.   

    补上
    dataDel()//只有一条sql语句的执行,而且我能保证是执行成功了
    {
        int idValue = (int)dataGridView1.CurrentRow.Cells["id"].Value;//我用datagridview1的一列保存id,设置id列为隐藏
        string sql = "delete from mymoney where id=" + idValue;                
        bool b = db.sqlExecute(sql);
    }回1楼:加载数据的语句给datarefresh完全一样。datarefresh只是重新读取一下数据而已。
    //你最开始DataGridView中的数据是怎么加载进来的?
    回3楼:我确定一地次点击的时候dataDel成功执行了,因为我在切换一下页面之后,也能正常的显示。
    //dataDel应该也没问题,问题应该在他最开始加载到dataGridView的方法中,导致他第一次执行butom的时候,dataDel执行无效,而专做了Refresh操作,使DataGridView再次正确的赋上了DataSource,第二次才正确执行。很郁闷,谢谢大家的回答。
      

  5.   

    先datagridview1.Rows.Clear()试试.
    不行再dataGridView1.Columns.Clear(),再重复form_Load中的add操作.
    再重复refresh中的操作, 没有道理不会变.不过,你没有充分利用DGV的特性,还是有编网页的惯性思维.像这种请况完全可以用dataGridView1.Rows.Remove()操作直接删除那一行.
    执行效率和显示效果都比重新绑定强得多.
      

  6.   

    偶然的发现:
    如果我在dataDel中加入MessageBox.show("");,点击一次就可以了
    谁帮我想个解决办法啊?
      

  7.   

    那你就在这个方法里面写个设置焦点的语句试试,比如你界面上还有其他控件,写在butom方法最开始处:this.你的控件名.Focus();
      

  8.   

    string sql = "delete from mymoney where id=" + idValue.ToString();
      

  9.   

    //to: Kevin_LiuFeng 
    //那你就在这个方法里面写个设置焦点的语句试试,比如你界面上还有其他控件,写在butom方法最开始处:this.你的控件名.Focus();
    谢谢你的思路,我试了不行的
                delRowForZhichuShouru();
                this.button1.Focus();
                this.dataGridView1.Focus();
                dataRefresh();//to:Qzh7523 ,谢谢你的提醒,虽然数字和串之间的运算会自动转换,但是我们该有个好的习惯。
    string sql = "delete from mymoney where id=" + idValue.ToString();