datagrid 通过线程收到消息来的修改数据后,为何不能刷新

解决方案 »

  1.   

      private void RecThread()
      {
          while (true)
            {
                byte[] buffer = new Byte[1024];
                int received = stream.Read(buffer, 0, 1024);
                if (received != 0)
                {
                    string s= Encoding.ASCII.GetString(buffer);
                    UpdatePicture(s);
                  }
            }
        }
     private void UpdatePicture(string  sResult)
        {
            
            int iCount = dv.Count;
            for(int i=0;i<iCount ;i++)
            {
                if (dv[i][1].ToString()==sCmd  )
                {
                    dv[i].BeginEdit();
                    if (sResult.ToUpper() =="OK")
                    {
                        dv[i][3] = "~/img/add.gif";
                    }
                    else
                    {
                        dv[i]["Result"] = "img/loading.gif";
                    }
                    dv[i].EndEdit();
                    DataGrid1.DataSource = dv;
                    DataGrid1.DataBind();绑定了,没用的,RecThread用来接收socket数据,updatepicture 用来更新,就是不行
                                }        }    }
      

  2.   

    三点:
    1、代码里面的“DataGrid1.DataSource = dv; 
       DataGrid1.DataBind(); ”
    这两行放到循环外面,不然影响代码效率。
    2、在DataGrid1.DataBind(); 这里加个断点,调试时看看有没有执行到这里。
    如果有执行到,一般都会刷新。3、页面上的DataGrid1 是不是 runat="server"
      

  3.   

    楼主使用线程了, 我猜出现这个问题的原因是: 异步机制与Http协议的无状态,无连接性
      

  4.   

    我怀疑 在page_load 处 重新绑定数据了吗??
      

  5.   

    有一个专门的用于绑定的CLASS的,你找找!你这样绑定不行。
      

  6.   

    三点: 
    1、代码里面的“DataGrid1.DataSource = dv; 
      DataGrid1.DataBind(); ” 
    这两行放到循环外面,不然影响代码效率。 
    2、在DataGrid1.DataBind(); 这里加个断点,调试时看看有没有执行到这里。 
    如果有执行到,一般都会刷新。 3、页面上的DataGrid1 是不是 runat="server" 
      

  7.   

    fengboawhf,按你说的三点,我都符合,还是不管用,
      

  8.   

    Jgood 说的对,怎么解决呢?