• 08-01-2013, 12:42:09
    #1
    Merhaba,

    Thread ile 10 veya 300 sn aralığında datagridview dolduruyorum. Bu işlemi yapınca datagridview aşağıdaki gibi bir hal alıyor. Bu hataya düşmesinin sebebi ne olabilir ve nasıl engelleyebilirim ?

  • 08-01-2013, 13:30:22
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    gridView.DataSource = null;
    gridView.Refresh();
    gridView.DataSource = _datatable; //neyle dolduruyorsan artık
    gridView.DataBind();
  • 08-01-2013, 14:02:38
    #3
    rob33n adlı üyeden alıntı: mesajı görüntüle
    gridView.DataSource = null;
    gridView.Refresh();
    gridView.DataSource = _datatable; //neyle dolduruyorsan artık
    gridView.DataBind();
    Denedim ama hata hala devam ediyor. Bu arada datagridview.DataBind(); yok "DataBindings" var
  • 08-01-2013, 14:12:24
    #4
    O benim repeater'dan kalma alışkanlığım pardon
    Şu şekilde reassign etmek belki işe yarar. gridViewBindingSource özelliği vardı sanırım.
    gridView.DataSource = this.gridViewBindingSource;
  • 08-01-2013, 14:20:20
    #5
    rob33n adlı üyeden alıntı: mesajı görüntüle
    O benim repeater'dan kalma alışkanlığım pardon
    Şu şekilde reassign etmek belki işe yarar. gridViewBindingSource özelliği vardı sanırım.
    gridView.DataSource = this.gridViewBindingSource;


    Söylediğiniz gridViewBindingSource özelliği yok form'da.
  • 08-01-2013, 14:30:34
    #6
    Nasıl bind ediyorsun? Thread içindeki kodlarını paylaşır mısın.
  • 08-01-2013, 14:41:23
    #7
    rob33n adlı üyeden alıntı: mesajı görüntüle
    Nasıl bind ediyorsun? Thread içindeki kodlarını paylaşır mısın.
    public DataTable GetDataTable(string sqlcumle)
        {
            SqlConnection baglanti = this.baglan();
            SqlDataAdapter adp = new SqlDataAdapter(sqlcumle, baglanti);
            DataTable dt = new DataTable();
            try
            {
                adp.Fill(dt);
            }
            catch (SqlException ex)
            {
    
                throw new Exception(ex.Message + " (" + sqlcumle + ") ");
            }
            adp.Dispose();
            baglanti.Close();
            baglanti.Dispose();
            return dt;
        }
    
    private void timer1_Tick(object sender, EventArgs e)
            {           
                Thread thread1 = new Thread(new ThreadStart(yeni));
                CheckForIllegalCrossThreadCalls = false;
                thread1.Start();
            }
    
    public void yeni()
    {
    dtgecici = GetDataTable("select * from Tablo");
    datagrdMac.DataSource = dtgecici;
    }
    DataSource olarak göstermeden önce datable üzerinde bir kaç işlem yapsamda (karşılaştırma vb. gibi) kod genel olarak bu şekilde.
  • 08-01-2013, 17:20:48
    #8
    Normalde gridview source'unu null'a eşitleyip refresh yapmak işe yarar ama burda neden olmadı anlamadım.
    Sadece source'u null yapınca boş geliyor mu peki?
    Veya bir öneri olarak grid'i dinamik yaratmakta çözüm olabilir.
  • 08-01-2013, 17:25:56
    #9
    rob33n adlı üyeden alıntı: mesajı görüntüle
    Normalde gridview source'unu null'a eşitleyip refresh yapmak işe yarar ama burda neden olmadı anlamadım.
    Sadece source'u null yapınca boş geliyor mu peki?
    Veya bir öneri olarak grid'i dinamik yaratmakta çözüm olabilir.
    Evet null datatable'nin içini boşaltmaya yarıyor. Şu kodu kullanıyorum ama sorun hala devam ediyor. Forumlarda araştırırken bunu önermişler biraz önce buldum ama sorunuma çözüm olmadı.

    private void ResetExceptionState(Control control)
            {
                typeof(Control).InvokeMember("SetState", BindingFlags.NonPublic |
                  BindingFlags.InvokeMethod | BindingFlags.Instance, null,
                  control, new object[] { 0x400000, false });
            }

    Son olarak dinamik olarka oluşturmak bilgisayarı kasmaz mı ? Çünkü yeri geliyor 10sn de bir datagrid'i dolduruyorum...