none
C# DataGridView Kolondaki Tarihi Convert Etme RRS feed

  • Genel Tartışma

  • Merhaba, Programda Grid içerisinde 5. kolonda tarihler var gridi excele aktama yaptığım zaman herşey yolunda fakat excelde tarih kısmına baktığım zaman metin olarak gözüküyor ve filtreleme yaparken tarihe göre sorun yaşıyorum gridde nasıl bir convert edebilirim de excele veriyi tarih formatında göndere bilirim teşekkür ederim. Yada başka bir çözüm yolu varmıdır.
    6 Aralık 2016 Salı 13:40

Tüm Yanıtlar

  • Gridin kaynaginda tarih ise sorun olmaz. Gride nasil geldigine bakin bence. Aktarirken de dogrudan kaynagindan aktarin, ortada kod olmadigindan neyi yanlis yaptiginizi goremiyoruz.
    6 Aralık 2016 Salı 13:46
    Yanıtlayıcı
  • Kod koymaya çalıştım fakat farklı alanlarda çok uzun olduğu için karışmasın diye koydum değer bana string olarak gözüküyor 01-01-2016 gibi bunu excele aktardığımdada bu şekilde aktarıyor ama hücre tipine metin olarak yapıştığı için filtrelemede istediğim şekilde gözükmüyor malesef gridde convert ederek tekrar yazdırsam sorunun düzeleceğini düşünüyorum
    6 Aralık 2016 Salı 13:54
  •   while (reader.Read())
                                    {
                                        model.Add(new KodModel
                                        {

                                                    Tarih = reader.IsDBNull(32) ? string.Empty : reader.GetString(32),

                                         });

                                         }

    Classta Tarih kısmını Public string Tarih [get;set] olarak tanımlı bu kısmı datetime olarak yaptığımda bu seferde veri gelmiyor.


    • Düzenleyen ahmt15 6 Aralık 2016 Salı 13:58
    6 Aralık 2016 Salı 13:57
  • Evet olay bastan sakatmis. Neden reader.GetString(32)???? Sakin databasede de string deme (korkarim ki oyle).

    Not: 32 yerine alan ismi olsa daha iyi degil mi? Ya birisi yapiyi degistirirse.

    6 Aralık 2016 Salı 14:15
    Yanıtlayıcı
  • Yok veri tabanında smalldatetime olarak geliyor ama ben çekmeyi bi türlü beceremedimğim için şimdilik program çalışsın diye string olarak çekiyorum :) ilgilendiğiniz için teşekkür ederim.
    6 Aralık 2016 Salı 14:53
  • Modelinde string yapmissin anladigim. Orada DateTime? olarak degistirirsen:

    model.Add(new KodModel
      {
        Tarih = (DateTime?)reader[32];
      });

    Ne guzel bir modelin var ve onu dolduruyorsun da, neden reader ile? Dogrudan Linq kullanarak yapsan olmuyor mu? Her neyse. Bence kaynaktan DateTime? olarak cekersen sorunun kalmaz. Ya da oraya dokunmayayim diyorsan Excel'e datagridden degil, dogrudan kaynaktan gonder. En kotu ihtimalle, DataGridden gondereceksen, bir List'te topla ve orada DateTime?'a cevir. Sonra codeplex EPPlus  kutuphanesi ile Excel'e yaz (forumda N kere ornegi verildi). 

    Dogrudan kaynaktan Excel'e almak icin de, forumda daha once verilen QueryTables.Add ya da CopyFromRecordSet orneklerine bakabilirsin.

    6 Aralık 2016 Salı 16:54
    Yanıtlayıcı
  • Verdiğiniz cevap için teşekkür ederim linq kullanmak istemedim çünkü sorgu sonucu yaklaşık olarak 1m satır geliyor bu şekilde daha hızlı ve doğru sonuç elde ediyorum. Değişkenin tipi datetime olarak dediğiniz gibi yaptığımda niye bilmiyorum program çalışıyor fakat sorgu sonucum gelmiyor. En doğrusuda dediğiniz gibi smalldatetime olarak gelen veriyi stringe ççevirmek başlıca hata ama öbür türlü sorgu sonucunu görüntüleyemiyorum.
    7 Aralık 2016 Çarşamba 05:44
  • Yada daha kolay ve basit bir yöntem ile şunuda yapabilirim şimdi aklıma geldi aşağıdaki kod ile excele gelen sonucu aktarıyorum griddeki. tarih kısmının geldiği kolon gridden string olarak gittiği için metin oluyor doğal olarak sonuç istediğim gibi görüntülenmiyor. exceli açtıkdan sonra tarihin geldiği kolonu (Örn. H kolonu) nu formatını tarihe çevirsem sorun düzelir diye düşünüyorum. Bu konuda yardımcı olabilecek yada bilgi olan varmı acaba.

    saveFileDialog1.Filter = "SADECE XLSX Dosyaları (*.xlsx)|*.xlsx";

                saveFileDialog1.InitialDirectory = "c:";

                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    var _Options = new DevExpress.XtraPrinting.XlsxExportOptions();

                    _Options.SheetName = ("Rapor");
                    
                    DtgVeriSorguGorüntüle.ExportToXlsx(saveFileDialog1.FileName, _Options);

                    if (MessageBox.Show("Aktarılan dosyayı şimdi görmek ister misiniz?", "Excel dosyası", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        System.Diagnostics.Process.Start(saveFileDialog1.FileName);
                    }
                }

    7 Aralık 2016 Çarşamba 05:51
  • Yardımcı olabilecek biri varmı acaba sorunum hala devam ediyor. Teşekkür ederim.
    12 Aralık 2016 Pazartesi 07:09
  • 3 tane yöntem

    1. H kolonunu seçin

    replace komutu ile bütün "-" leri "/" ile değiştirin.

    2. H2'den itibaren tüm tarihleri seçin. (F5,H2, Enter, CTRL+Aşağı ok)

    bu seçimi yapınca excel otomatik string number/date çevrim sorusunu ufak bir kutuda getiriyor olmalı. Oradan convert edin

    3. Date fonksiyonları ile başka bir kolonda tarihe çevirip eski yerine değer olarak kopyalayabilirsiniz.,

    ek: Eğer gelen string dizisi boşluk içeriyor ise önce kolondaki boşlukları silin. (F5,H:H,enter,ctrl+H, boşluk,replace all)


    http://pgnchess.com
    http://dergikapaklari.com




    • Düzenleyen Halil TAŞ 12 Aralık 2016 Pazartesi 08:04
    12 Aralık 2016 Pazartesi 08:01
  • Sonuc 1m satir diye Linq kullanmamak daha da garip olmus. O zaman DataTable daha da yavas bir cozum ama madem oyle istiyorsunuz oyle olsun. Yine de farketmez, modelinizde string kullanmayin, DateTime? kullanin. DateTime'in arayuzde gosterimi bir formata bakar.
    12 Aralık 2016 Pazartesi 11:21
    Yanıtlayıcı
  • http://www.yazilimbilisim.net/c-sharp/c-ile-excel-dosyasini-bicimlendirme/

    adresinde c# ile excel bicimlendirme işlemleri var yardımcı olur.

    12 Aralık 2016 Pazartesi 15:44