我是这样做的:1、做一个gridcontrol,建立一个datatable1,从sql数据库读取数据并提取出需要的内容放到了datatable1里面,然后将datatable的defualtview绑定到了gridcontrol.datasource,列表显示,没有问题。2、后台定时对datatable1内的数据进行了修改并显示。报错,错误定位在对datatable1内容修改的时候,例如我是这样改的
datatable1.rows["列1"]="新数值";反复定位,只要这样去修改datatable1,不管接下来如何做都会报错。3、用vs2008自带的gridview控件做上述实验,没有报任何错误,对datatable1中数据修改后,界面上会直接显示。请帮忙解决下dev的这问题,或许是我使用不当

解决方案 »

  1.   

    后台定时的用多线程操作 时会报错。datatable1 变成List<T> 就好了
      

  2.   


    为啥用list,gridview显示不正常啊,如何把list绑到gridview ,再一个list查找某行数据怎么查啊
      

  3.   

    是WinForm吗?换个绑定方式试试看,我们也用Dev没有这样的问题,用BindingSource 组件
    DataTable dt = 。;
    BindingSource bs = dt;
    表格。数据源 = bs;
      

  4.   

    datatable1.rows["列1"]="新数值" ,这句报错,没有道理啊?
    楼主把你的部分代码贴出来,并把出错位置也指出来。
      

  5.   

    喔,datatable1.rows["列1"]="新数值";这样写有问题:datatable1.rows[行索引]["列1"]="新数值";
      

  6.   


    代码是这样写的我后台是用timer计时器定期调用函数doit,class form1
    {
      public DataTable datatable1;
      public init
       {
          对datatable1进行初始化赋值,并将其绑定到gridcontrol上
          步骤略;      System.Timers.Timer   t   =   new   System.Timers.Timer(1000*3);
          t.AutoReset=true;
          t.Elapsed   +=new   System.Timers.ElapsedEventHandler(doit); 
          t.Start();
       } public delegate void Dodelegate(string ip); 
     public void doit(Object   sender,   System.Timers.ElapsedEventArgs   e)
      {
        Dosomething ds =new Dosomething();
        Dodelegate del =new Dodelegate(ds.Do);
        AsyncCallback callBack = new AsyncCallback(OnComplete);
        del.BeginInvoke("haha", callBack, null); 
      }
     public void OnComplete(IAsyncResult asy) 
      {
            AsyncResult rst = (AsyncResult)asy;
            Dodelegate del = (Dodelegate )rst.AsyncDelegate;             bool rtn = del.EndInvoke(asy);
            
            foreach(DataRow dr in datatable1)
           {
              if(rtn)
                dr["要改的字段"]="要改的数值";
              else
                dr["要改的字段"]="别的数值";
            }
          
        }
    }
    public class Dosomething
    {
       public bool Do(string ip)
        {...}
    }大家帮忙看看,是不是因为用了异步调用的原因,才报错的,貌似跟devexpress无关,我换成vs自带的gridview以后,观察内存一直在涨,然后还是会报错,错误是赋值时索引超出范围,必须为非负值并小于集合大小。
      

  7.   


    用List确实不报错了,但是grid中的数据不自动刷新了,怎么回事,必须要用鼠标去点一下页面那一行才会刷新,用update()等函数也不管用