none
C# Veritabanından Gridviewe Çektiğim Bilgilerden İstenilen Satırın Çıktısını Alma RRS feed

  • Soru

  • Merhaba Arkadaşlar;

    Bir konuda yardıma ihtiyacım var. Anlatabildiğim kadar anlatmaya çalışıcam.

    Yapmak istediğim şu;

    Bir print sayfası hazırladım çizgilerimi oluşturdum print sayfasının tasarımını hazırladım ve yapmak istediğim veritabanındaki kayıtlarımı dataGridview'e çekiyorum ve Çektiğim bilgilerde rapor numarası var. Yazdırma Form'umda;

    1 Adet Label

    1 Adet TextBox

    1 Adet Yazdır Butonu

    1 Adet Baskı Önizleme Butonum olucak.

    TextBox'a Rapor Numrasını yazıp Yazdır Butonuna bastığımda dataGridView'deki Rapor Numrasına ait satırdaki bilgileri yaptığım print sayfasında gerekli yerlere oturtup yazdırmak istiyorum. Böyle bir işlem mümkünmüdür. Mümkünse yardımcı olabilirmisiniz.

    13 Nisan 2017 Perşembe 11:11

Yanıtlar

  • private void button1_Click(object sender, EventArgs e)
    {

        PrintDocument pDoc = new PrintDocument(); 
        pDoc.PrintPage += new PrintPageEventHandler(PrintPage);
        pDoc.Print();

    }

    private void PrintPage( object sender, PrintPageEventArgs e)

    {

        if (dataGridView1.SelectedRows != null)

        {

             DataGridViewRow dgRow = dataGridView1.SelectedRows[0];

    Font drawFont = new Font("Arial", 16);

    SolidBrush drawBrush = new SolidBrush(Color.Black);

    Pen blackPen = new Pen(Color.Black);

    StringFormat drawFormat = new StringFormat();

    drawFormat.Alignment = StringAlignment.Center;

    float x = 150.0F;

    float y = 150.0F;

    float width = 200.0F;

    float height = 50.0F;

    RectangleF drawRect = new RectangleF(x, y, width, height);

    e.Graphics.DrawRectangle(blackPen, x, y, width, height);

    e.Graphics.DrawString(dgRow.Cells[0].Value.ToString(), drawFont, drawBrush, drawRect, drawFormat);

    //Buradan sonra x, y ve width değerlerini değiştirip dgRow.Cells[1].Value

    //ve diğer hücreleri aynı yöntemle yazdırmalısınız. Başarılar...

    }

    }


    13 Nisan 2017 Perşembe 15:31
  • x = 150.0F;

    y = 250.0F;

    width = 400.0F;

    drawRect = new RectangleF(x, y, width, height);

    e.Graphics.DrawString(dgRow.Cells[1].Value.ToString(), drawFont, drawBrush, drawRect, drawFormat);

    x = 150.0F;

    y = 350.0F;

    width = 100.0F;

    drawRect = new RectangleF(x, y, width, height);

    e.Graphics.DrawString(dgRow.Cells[2].Value.ToString(), drawFont, drawBrush, drawRect, drawFormat);

    .

    .

    .

    x = 150.0F;

    y = 750.0F;

    width = 300.0F;

    drawRect = new RectangleF(x, y, width, height);

    e.Graphics.DrawString(dgRow.Cells[15].Value.ToString(), drawFont, drawBrush, drawRect, drawFormat);

    NOT: Verdiğim x, y ve width değerleri örnektir. Kendinize göre düzenleyin...

    14 Nisan 2017 Cuma 15:38
  • Bu kısım doğru. Acaba pDoc.PrintPage += ... olayını atamamış olabilir misiniz.?.
    • Yanıt Olarak İşaretleyen Toprak Volkan 15 Nisan 2017 Cumartesi 09:22
    15 Nisan 2017 Cumartesi 08:21
  • e.Graphics.DrawRectangle(blackPen, x, y, width, height);

    satırını silin...

    • Yanıt Olarak İşaretleyen Toprak Volkan 15 Nisan 2017 Cumartesi 13:18
    15 Nisan 2017 Cumartesi 09:37

Tüm Yanıtlar

  • System.Drawing.Printing.PrintDocument sınıfını inceleyin...

    https://msdn.microsoft.com/tr-tr/library/21kdfbzs(v=vs.110).aspx

    13 Nisan 2017 Perşembe 11:42
  • Öncelikle yorumunuz için teşekkür ederim. Yeni olduğum için pek anlamıyorum ama dediğiniz gibi araştırıcam. Kod kısmında yardımcı olucak arkadaşların yorumlarını bekliyorum.
    13 Nisan 2017 Perşembe 11:47
  • Selam, öncelikle yazdığın rapor numarasına göre kaydı veritabanından çekip, sayfandaki kontrolleri doldurabilirsin. 

    Ama ille de gridviewden çekeceksen, 

                String searchValue = "aranacak RaporId";
                int rowIndex = -1;
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    if (row.Cells[0].Value.ToString().Equals(searchValue))
                    {
                        rowIndex = row.Index;
                        break;
                    }
                }
                if (rowIndex != -1)
                {
                    var _row = dataGridView1.Rows[rowIndex];
                    label1.Text = _row.Cells[0].Value.ToString();
                    textBox1.Text = _row.Cells[1].Value.ToString();
                    //Diğer kontroller
                }
                else
                {
                    //rapor bulunamadı
                }
    Burada 
    row.Cells[0]
    satırındaki "1" senin RaporNumarası kolonun index numarası olmalı. umarım faydalı olur.

    • Düzenleyen GüvenAslan 13 Nisan 2017 Perşembe 12:10 spellcheck2
    13 Nisan 2017 Perşembe 12:09
  • Yorum için teşekkür ederim. Peki mesela firma_adi , firma_il vbvb kolonlarım var ordaki bilgileri Yazdırma sırasında gerekli yerlere nasıl oturtabilirim. tek tek bir kereliğine tanımlamam gerekiyor. yani şöyle rapor numarası örneğin 200 olan satırımda yaklaşık 10-15 alan var onları gerekli yerlere yazdırma esnasında nasıl oturtabilirim.
    13 Nisan 2017 Perşembe 12:51
  • Fotoğraf ile anlatayım altta gördüğünüz fotoğraf benim yazdırma ekranım bu yazdırma ekranımdaki başlıkların hepsi veritabanımda var mesela Kullanıcı firma veritabanımda firma_adi bütün bilgileri gridviewe çekiyorum her kaydın da bir rapor numarası var id gibi bu rapor numarasını textboxa yazıp yazdır dediğimde veritabanındaki o rapor numarasına ait bütün bilgileri alttaki gördüğünüz yazdırma ekranımda gerekli yerlere oturtmak istiyorum örneğin firma_adini = Kullanıcı Firma , firma_ili = şehir kısmına oturtmak gibi bir örnek verebilirseniz ben uyarlarım konumlarını ayarlarım. Yardımlarınızı ve değerli yorumlarınızı bekliyorum.


    13 Nisan 2017 Perşembe 13:11
  • aşağıdaki kodu dener misin, çalışıp çalışmadığını test etme imkanım olmadı.

    label1.Text = label1.Text = _row.Cells["firma_il"].Value.ToString();

    Bu linke de bakabilirsin: http://stackoverflow.com/questions/13436553/how-to-get-cell-value-of-datagridview-by-column-name

    umarım faydalı olur.

    13 Nisan 2017 Perşembe 13:17
  • Yorum için tekrar teşekkürler ama şöyle bir sorun var label1.Text demişsiniz mesela bu yazdırma önizlemesinde göründüğü gibi sadece çizgiler başlıklarvar orda herhangi bir label yok nereye yazıcağı belli değil bunu nasıl konumlandırabilirim yazdırma ekranına nasıl label ekleyebilirim.
    13 Nisan 2017 Perşembe 13:25
  • Şöylede olabilir textboxa rapor numarası yazıp değilde gridView'den Seçtiğim satırıda yazdırabilirim bu şekilde olsa daha iyi olur hatta. Yani dataGridView'den Yazdırmak istediğim satırı seçtim Yazdır Dedim ve Seçtiğim Satırdaki bilgiler sayfamda gerekli yerlere oturdu gibi.
    13 Nisan 2017 Perşembe 14:54
  • private void button1_Click(object sender, EventArgs e)
    {

        PrintDocument pDoc = new PrintDocument(); 
        pDoc.PrintPage += new PrintPageEventHandler(PrintPage);
        pDoc.Print();

    }

    private void PrintPage( object sender, PrintPageEventArgs e)

    {

        if (dataGridView1.SelectedRows != null)

        {

             DataGridViewRow dgRow = dataGridView1.SelectedRows[0];

    Font drawFont = new Font("Arial", 16);

    SolidBrush drawBrush = new SolidBrush(Color.Black);

    Pen blackPen = new Pen(Color.Black);

    StringFormat drawFormat = new StringFormat();

    drawFormat.Alignment = StringAlignment.Center;

    float x = 150.0F;

    float y = 150.0F;

    float width = 200.0F;

    float height = 50.0F;

    RectangleF drawRect = new RectangleF(x, y, width, height);

    e.Graphics.DrawRectangle(blackPen, x, y, width, height);

    e.Graphics.DrawString(dgRow.Cells[0].Value.ToString(), drawFont, drawBrush, drawRect, drawFormat);

    //Buradan sonra x, y ve width değerlerini değiştirip dgRow.Cells[1].Value

    //ve diğer hücreleri aynı yöntemle yazdırmalısınız. Başarılar...

    }

    }


    13 Nisan 2017 Perşembe 15:31
  • Çok teşekkür ederim yarın deniyeceğim kafamın karıştığı kısım şu yanlış anlamış olabilirim dediğinize göre seçili satırın her hücresini tanımlayacağım örneğin şöylemi olucak 

    e.Graphics.DrawString(dgRow.Cells[1].Value, drawFont, drawBrush, drawRect, drawFormat);

    float x = 150.0F;

    float y = 150.0F;

    Böyle birşey yaptığımda seçili satırdaki 1.hücreyi fotoğraftaki yazdırma ekranımda x 150 y 150 konumunamı taşımış oluyorum.

    Yeniyim kusura bakmayın. ilginiz için tekrar teşekkürler.

    13 Nisan 2017 Perşembe 19:41
  • İlk hücre indeksi 0 dır ve width değerini de ayarlamalısınız. Bunun haricinde doğru anlamışsınız.

    Bu arada denemeniz başarılı olduğunda "YANIT OLARAK İŞARETLE" meyi unutmayın.

    Başarılar...


    13 Nisan 2017 Perşembe 21:06
  • Teşekkürler şuan deniyorumda bu vermiş olduğunuz kodları 

    printDocument1_PrintPage Kısmınamı yazıcaz.

    14 Nisan 2017 Cuma 06:45
  • Hocam yorumunuzu bekliyorum.
    14 Nisan 2017 Cuma 09:18
  • Uğraştım ama malesef başaramadım. Yardımcı olabilirmisiniz.

    14 Nisan 2017 Cuma 10:43
  • Yukarıda yazdığım kodu kopyalayıp yapıştırmanız yeterli. Sadece en alta yazdırmak istediğiniz diğer hücreleri x, y ve width değerleri ile ekleyeceksiniz. Koordinatları deneyerek tespit edebilirsiniz.

    İyi çalışmalar...

    14 Nisan 2017 Cuma 13:16
  • Kopyala yapıştır yapınca bu hatayı alıyorum.

    Error 1 The type or namespace name 'PrintPageEventArgs' could not be found (are you missing a using directive or an assembly reference?)


    14 Nisan 2017 Cuma 13:30
  • using System.Drawing.Printing;
    14 Nisan 2017 Cuma 14:03
  • Error 2 Argument 1: cannot convert from 'object' to 'string'
    Error 1 The best overloaded method match for 'System.Drawing.Graphics.DrawString(string, System.Drawing.Font, System.Drawing.Brush, System.Drawing.RectangleF, System.Drawing.StringFormat)' has some invalid arguments

    Yazdığınız Referansı ekleyince bu hataları alıyorum. Sizide uğraştırıyorum kusura bakmayın.

    14 Nisan 2017 Cuma 14:18
  • dgRow.Cells[1].Value.ToString() olarak değiştirin...

    Yukarıdaki kodu da düzenledim. Yeniden kopyala yapıştır yapabilirsiniz...

    14 Nisan 2017 Cuma 14:42
  • şuan herhangi bir hata kalmadı teşekkürler. Şöyle bir şey sorayım ;

    e.Graphics.DrawString(dgRow.Cells[0].Value, drawFont, drawBrush, drawRect, drawFormat, x = 150, y = 150, width = 100);

    e.Graphics.DrawString(dgRow.Cells[1].Value, drawFont, drawBrush, drawRect, drawFormat, x = 200, y = 200, width = 100);

    e.Graphics.DrawString(dgRow.Cells[2].Value, drawFont, drawBrush, drawRect, drawFormat, x = 210, y = 210, width = 100);

    Kordinatlar örnek olarak bu şekildemi tanımlıycam belki gülünecek bir kod yazdım ama cahilliğimi affedin :)



    14 Nisan 2017 Cuma 15:23
  • x = 150.0F;

    y = 250.0F;

    width = 400.0F;

    drawRect = new RectangleF(x, y, width, height);

    e.Graphics.DrawString(dgRow.Cells[1].Value.ToString(), drawFont, drawBrush, drawRect, drawFormat);

    x = 150.0F;

    y = 350.0F;

    width = 100.0F;

    drawRect = new RectangleF(x, y, width, height);

    e.Graphics.DrawString(dgRow.Cells[2].Value.ToString(), drawFont, drawBrush, drawRect, drawFormat);

    .

    .

    .

    x = 150.0F;

    y = 750.0F;

    width = 300.0F;

    drawRect = new RectangleF(x, y, width, height);

    e.Graphics.DrawString(dgRow.Cells[15].Value.ToString(), drawFont, drawBrush, drawRect, drawFormat);

    NOT: Verdiğim x, y ve width değerleri örnektir. Kendinize göre düzenleyin...

    14 Nisan 2017 Cuma 15:38
  • İlginiz için teşekkür ederim verdiğiniz kodlar şuan hiç hata vermiyor. ama örnek olarak kordinatları girdim bir hücreyi çekmeyi deniyeyim dedim kodlar hata vermediği halde Önizleme ekranındada yazdırıp pdfe kaydettiğimdede herhangi bir şey çekmiyor. hatada vermiyor neden kaynaklanabilir.
    15 Nisan 2017 Cumartesi 05:51
  • şuanki kodun tamamı şu şekilde yanlışlık varmı acaba. 2 hücreyi denemek amaçlı yaptım ama dediğim gibi hata vermediği halde yazdırırken ön izlememde yok pdfe yazdırdığımdada yok.

            private void PrintPage(object sender, PrintPageEventArgs e)
            {

                if (dataGridView1.SelectedRows != null)
                {

                    DataGridViewRow dgRow = dataGridView1.SelectedRows[0];

                    Font drawFont = new Font("Calibri", 9);

                    SolidBrush drawBrush = new SolidBrush(Color.Black);

                    Pen blackPen = new Pen(Color.Black);

                    StringFormat drawFormat = new StringFormat();

                    drawFormat.Alignment = StringAlignment.Center;

                    float x = 150.0F;

                    float y = 150.0F;

                    float width = 200.0F;

                    float height = 50.0F;

                    RectangleF drawRect = new RectangleF(x, y, width, height);

                    e.Graphics.DrawRectangle(blackPen, x, y, width, height);

                    e.Graphics.DrawString(dgRow.Cells[0].Value.ToString(), drawFont, drawBrush, drawRect, drawFormat);

                    x = 50.0F;

                    y = 100.0F;

                    width = 100.0F;

                    drawRect = new RectangleF(x, y, width, height);

                    e.Graphics.DrawString(dgRow.Cells[1].Value.ToString(), drawFont, drawBrush, drawRect, drawFormat);

                    x = 500.0F;

                    y = 500.0F;

                    width = 300.0F;

                    drawRect = new RectangleF(x, y, width, height);

                }



    15 Nisan 2017 Cumartesi 07:26
  • Bu kısım doğru. Acaba pDoc.PrintPage += ... olayını atamamış olabilir misiniz.?.
    • Yanıt Olarak İşaretleyen Toprak Volkan 15 Nisan 2017 Cumartesi 09:22
    15 Nisan 2017 Cumartesi 08:21
  • Çok teşekkür ederim şuan verileri çekebiliyorum istediğim yere. Takıldığım yer olursa sormamda bir sakınca varmı acaba.
    15 Nisan 2017 Cumartesi 09:23
  • Faydalı olduğuna sevindim. Her zaman sorabilirsiniz.

    İyi çalışmalar...

    15 Nisan 2017 Cumartesi 09:28
  • Böyle birşey oluyor veriyor çekiyorum örneğin ilk veriyi çektiğimde bir kare oluşturuyor kendiliğinde resimd görüldüğü gibi. ama diğer çektiğim verilerde örneğin yetkili kişinin üstüne denk geldi orda herhangi bir kare oluşmuyor. 3.4. çektiğim verilerdede olmuyor sadece ilk çektğimde oluyor.

    15 Nisan 2017 Cumartesi 09:35
  • e.Graphics.DrawRectangle(blackPen, x, y, width, height);

    satırını silin...

    • Yanıt Olarak İşaretleyen Toprak Volkan 15 Nisan 2017 Cumartesi 13:18
    15 Nisan 2017 Cumartesi 09:37
  • Çok teşekkür ederim ben ilk defa bir soru sorupta bu kadar net cevap aldığımı gördüm. Emeğinize sağlık.
    15 Nisan 2017 Cumartesi 13:19
  • Son bir sorum daha olacak ben bu yaptığımı yazdır dediğimde direk yazdırıyorum bunu önizlemede görmeye çalıştığımda hiç bir belge yok diyor. nasıl yapabilirim.
    15 Nisan 2017 Cumartesi 19:50
  • printPreviewDialog1.Document = printDocument1;

    printPreviewDialog1.ShowDialog();

    15 Nisan 2017 Cumartesi 19:59
  • ön izleme ekranı geliyor oluşturduğum tasarımı görüyorum ama çektiğim veriler gözükmüyor.
    15 Nisan 2017 Cumartesi 20:27
  • Acaba Yazdığımız kodlar printDocument1 ' de değil PrintPage'de olduğu için yapabilirmi.
    15 Nisan 2017 Cumartesi 20:36
  • Sorunu hallettim ilginiz ve alakanız için tekrar teşekkür ederim. Sorunu şöyle çözdüm vermiş olduğunuz bütün kodları PrintPage değild PrintDocument Pageye Yapıştırdım şuan bir sorun yok. Baskı Önizleme , Yazdır ve Veri çekmede sayenizde herhangi bir sorun yaşamıyorum.
    17 Nisan 2017 Pazartesi 10:36