DevExpress PivotGridControl

Merhabalar,

Bu yazımda DevExpress Pivot Grid Control’ün Excel e aktarılmasından bahsedeceğim.

Senaryomuz şöyle ; Excel ile bağlantısını koparmamış firmalarda yönetici kullanıcıdan verdiği kriterler doğrultusunda oluşturulmuş bir satış

raporu isteyebilir. Bu rapor hem excel de olacak hem de pivot halinde. Bunu en kısa yoldan nasıl yaparız? Cevabı burda… Buyrun bakalım.

Bir Sub oluşturuyoruz.

Sub Pivot_Yazdir_Gonder(ByVal Grd_Name As DevExpress.XtraPivotGrid.PivotGridControl)

Dim fpath As String = System.IO.Path.GetTempFileName()

fpath= fpath.Remove(fpath.LastIndexOf(“.”) + 1)

fpath=String.Concat(fpath, “xlsx”)

fpath=“c:\myDoc\Temp\” & Mid(fpath, fpath.LastIndexOf(“\”) + 2, Len(fpath))

Grd_Name.ExportToXlsx(fpath)

New_Xls =New Microsoft.Office.Interop.Excel.Application

New_Xls.Visible =True

Xls_Wbook = New_Xls.Workbooks.Open(fpath, ,True)

New_Xls.ActiveWindow.Zoom = 100

New_Xls.ActiveWindow.DisplayGridlines =False

Xls_Wbook.ActiveSheet.cells.select()

Xls_Wbook.ActiveSheet.Cells.EntireColumn.AutoFit()

Xls_Wbook.ActiveSheet.Cells(1, 1).select()

Kill(fpath)

Xls_Wbook =Nothing

New_Xls =Nothing

EndSub

 

Başka bir yazıda görüşmek üzere,

Sevgiyle kalın.

By AyşegülCoşar YAZILIM içinde yayınlandı

Vb Üzerinden Sql Veritabanı Üzerinde Tablo Oluşturma & Silme

Private Sub Tablo_Olustur(ByVal Table_Name AsString)

DB.Execute(“CREATE TABLE “ & Table_Name & ” (ID INT IDENTITY(1,1),PRIMARY KEY (ID))”)

DB.Execute(“ALTER TABLE “ & Table_Name & ”  ADD [FIRMA_ADI] varchar(100);”)

DB.Execute(“ALTER TABLE “ & Table_Name & ”  ADD [FIRMA_UNVANI] varchar(110) ;”)

DB.Execute(“ALTER TABLE “ & Table_Name & ”  ADD [YETKILISI] varchar(100) ;”)

DB.Execute(“CREATE NONCLUSTERED INDEX [TEST_INDEX] ON [dbo].[“ & Table_Name & “] ( [FIRMA_ADI] ASC, [FIRMA_UNVANI] ASC)INCLUDE ( [YETKILISI],[FIRMA_UNVANI],[FIRMA_ADI]) “)

EndSub

Dim SqlCmd AsNew SqlClient.SqlCommand(“EXECUTE [dbo].[FN_DELDUPLICATE] ‘” & Table_Name & , SqlCon)

SqlCmd.CommandTimeout = 3500

SqlCmd.ExecuteNonQuery()

By AyşegülCoşar YAZILIM içinde yayınlandı

Options.ini dosyası oluşturma

Merhaba,

Bu yazımızda Options.ini dosyasının kullanımını inceleyeceğiz.

Öncelikle projemizde bulunan Module de aşağıdaki gibi bir değişken tanımlaması yapıyoruz.

Public DB As ADODB.Connection

Public Ayar_Dosyasi AsIniFiles = NewIniFiles(Mid(System.Reflection.Assembly.GetExecutingAssembly().Location.ToString, 1, Val(System.Reflection.Assembly.GetExecutingAssembly().Location.LastIndexOf(“\”))) & “\Options.ini”)

Ardından aşağıdaki gibi bir class ı Modulumuze ekliyoruz.

PublicClassIniFiles

PrivateDeclareAnsiFunction GetPrivateProfileString Lib“kernel32.dll”Alias“GetPrivateProfileStringA” (ByVal lpApplicationName AsString, ByVal lpKeyName AsString, ByVal lpDefault AsString, ByVal lpReturnedString As System.Text.StringBuilder, ByVal nSize AsInteger, ByVal lpFileName AsString) AsInteger

PrivateDeclareAnsiFunction WritePrivateProfileString Lib“kernel32.dll”Alias“WritePrivateProfileStringA” (ByVal lpApplicationName AsString, ByVal lpKeyName AsString, ByVal lpString AsString, ByVal lpFileName AsString) AsInteger

PrivateDeclareAnsiFunction GetPrivateProfileInt Lib“kernel32.dll”Alias“GetPrivateProfileIntA” (ByVal lpApplicationName AsString, ByVal lpKeyName AsString, ByVal nDefault AsInteger, ByVal lpFileName AsString) AsInteger

PrivateDeclareAnsiFunction FlushPrivateProfileString Lib“kernel32.dll”Alias“WritePrivateProfileStringA” (ByVal lpApplicationName AsInteger, ByVal lpKeyName AsInteger, ByVal lpString AsInteger, ByVal lpFileName AsString) AsInteger

Private strFilename AsString = “”

PublicSubNew(ByVal Filename AsString)

strFilename = Filename

EndSub

PublicProperty FileName(ByVal strFilename AsString) AsString

Get

Return strFilename

EndGet

Set(ByVal value AsString)

strFilename = value

EndSet

EndProperty

PublicFunction Getir(ByVal Section AsString, ByVal Key AsString, ByVal [Default] AsString) AsString

Dim Sonuc AsString = “”

Dim intCharCount AsInteger

Dim objResult AsNew System.Text.StringBuilder(1024)

intCharCount = GetPrivateProfileString(Section, Key, [Default], objResult, objResult.Capacity, strFilename)

If intCharCount > 0 Then Sonuc = Left(objResult.ToString, intCharCount)

Getir = Sonuc

EndFunction

PublicFunction GetirSayi(ByVal Section AsString, ByVal Key AsString, ByVal [Default] AsInteger) AsInteger

Return GetPrivateProfileInt(Section, Key, [Default], strFilename)

EndFunction

PublicSub Yaz(ByVal Section AsString, ByVal Key AsString, ByVal Value AsString)

WritePrivateProfileString(Section, Key, Value, strFilename)

Flush()

EndSub

PublicSub YazSayi(ByVal Section AsString, ByVal Key AsString, ByVal Value AsInteger)

Yaz(Section, Key,

CStr(Value))

Flush()

EndSub

PrivateSub Flush()

FlushPrivateProfileString(0, 0, 0, strFilename)

EndSub

EndClass

 

Son olarak projenin bin klasoru altına hangi durumda projeyi build ediyorsak (“Ben Debug kullanıyorum”) Options.ini dosyasını ekliyoruz.

Böylece programımız istediğimiz veritabanı bağlantılarını kullanarak güvenli bir şekilde veritabanına bağlanıcak ve çalışacaktır.

 

Başka bir yazıda görüşmek dileğiyle…

Sağlıcakla kalın.

Alıntı

Select Case Yapısı

Dim day As String = “”
day = TextBox1.Text
Select Case day

Case “Pazartesi”
Label1.Text = ” Haftanın 1. günü ”
Case “Salı”
Label1.Text = ” Haftanın 2. günü ”
Case “Çarşamba”
Label1.Text = ” Haftanın 3. günü ”
Case “Perşembe”
Label1.Text = ” Haftanın 4. günü ”
Case “Cuma”
Label1.Text = ” Haftanın 5. günü ”
Case Else
End Select

Select Case Yap…

By AyşegülCoşar YAZILIM içinde yayınlandı

Crystal Report ile Parametre Oluşturmak

Bu yazımda Crystal Report ile oluşturduğumuz rapora parametre eklemeyi anlatacağım.

Öncelikle kısaca hazırlık aşamasından bahsetmek gerekirse veri tabanımda bulunan Firmalar ve Projeler tablolarımı kullanarak bir view oluşturdum.

Senaryo şöyle;

Firmalara göre gruplandırılmış ve statüsü “ONAYLANDI ” olan proje isimlerini raporumda görüntülemek istiyorum.

Vee başlıyoruz.

Öncelikle projemize boş bir rapor sayfası ekliyoruz.

Database Fields->Database Expert sekmesinden db bağlantısı oluşturuyoruz ve ilgili tablo, view v.s raporumuza ekliyoruz.

Field Explorer kutusunda Parameter Fields sekmesi üzerinde sağ click yaparak yeni bir parametre ekliyoruz.

Açılan pencerede parametre adı, tipi, değerler listesi, değer alanı ve açıklama alanı kısımlarını dolduruyoruz. Aşağıdaki listede bulunan değer alanına ilgili alana ait hangi değeri atamak istiyorsak onu ekliyoruz.

Bu işlemi tamamladıktan sonra Crystal Reports ->Report-> Select Expert-> Record diyelim.

Çıkan ekranda koşul ( Ben eşittir -> equals to kullandım. ) ve parametre adını belirttikten sonra Tamam diyerek işlemi tamamlayalım.

Son olarak yaptığımız tanımlamalar sayesinde yeni oluşturduğumuz parametre Field Explorer->Parameter Fields alanında görüntüleniyor. Sıra geldi parametreyi raporumuza eklemeye. Üzerinde sağ click yaparak Insert to Report diyoruz.

Bu son işlemle birlikte yeni oluşturduğumuz parametre raporumuza eklendi.

Ekran görüntüsü aşağıdaki gibi olucak;

Çalıştırdığımızda karşımıza aşağıdaki ekran çıkacak. Buradan parametreye değer gönderelim.

Image

Ve  raporumuzun son hali aşağıdaki gibi olacak. Ben biraz süslemek adına ; format özellikleri ile oynadım, sayfa numarası ve tarih ekledim.

Image

Gördüğünüz gibi Crystal Report ile raporlar tasarlamak hem zevkli hem basit ve tasarım anlamında estetik hem de oluşturduğunuz raporlar çok esnek ve kullanışlı.

Başka bir yazıda görüşmek dileğiyle,

Şimdilik hoşçakalın 😉

BULK INSERT

Çoğu zaman uyumlu herhangi bir kaynaktan SQL SERVER’ a veri gömmemiz gerekebilir.

Bunun için yapmamız gereken BULK INSERT komutunu kullanmak.

Örnek kod aşağıdaki gibidir;

BULK INSERT MY_ TEMP_TABLE FROM ‘f:\data\sales.tbl’

WITH (CODEPAGE = ‘RAW’,DATAFILETYPE  = ‘char’,BATCHSIZE = 100000, ROWS_PER_BATCH = 1925604,FIRSTROW=1″‘)” ‘

Aşağıdaki kodda alan ayıracı olarak ‘ |'”, satır ayıracı olarak “|\n” ifadeleri kullanılmıştır.

BULK INSERT MyDb.Sales.SalesOrderDetail FROM ‘d:\orders\sales.tbl’ WITH ( FIELDTERMINATOR =’ |’, ROWTERMINATOR =’ |\n’ )

Sql Server 2008 Notları- 1

Bazen Sql Server üzerinde bulunan tablolarımızın kolon isimlerine ihtiyaç duyarız. Bu durumda en kısa yoldan kolon isimlerine aşağıdaki kodla ulaşırız.

SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME=’TEMP_TABLE’
ORDER BY ORDINAL_POSITION

Tablo isimlerini getiriyoruz.

SELECT * FROM INFORMATION_SCHEMA.TABLES

INNER JOIN

2 tablo arasındaki sadece eşleşen sonuçlar geri döner.

SELECT F.firm_firmName,P.proje_projeKonu FROM tbl_Firmalar AS F
INNER JOIN tbl_Projeler AS P
ON F.firm_firmID= P.proje_firmID

LEFT OUTER JOIN

Sorguda eşitliğin solunda kalan tablodaki sadece eşleşen satırlar döner. Sağ tarafta kalan tablodan ise boş satırlar da dahil olmak üzere tüm değerler geri döner.

SELECT F.firm_firmName,P.proje_projeKonu FROM tbl_Firmalar AS F
INNER JOIN tbl_Projeler AS P
ON F.firm_firmID= P.proje_firmID

RIGHT OUTER JOIN

Left Outer Join de yaptığımız açıklamanın tam tersidir.

SELECT F.firm_firmName,P.proje_projeKonu FROM tbl_Firmalar AS F
RIGHT OUTER JOIN tbl_Projeler AS P
ON F.firm_firmID= P.proje_firmID

FONKSİYON TANIMLAMA

Fonksiyonumuza Firma adını parametre şeklinde vererek, Firmalar tablomuzdan istenilen firmanın Id’ sini getiriyoruz.

CREATE FUNCTION [dbo].[FN_GETFIRMID]
(
@FIRMNAME VARCHAR(100) — PARAMETRE TANIMLAMA

)

RETURNS VARCHAR(100) — DÖNECEK DEĞERİN TİPİ
AS BEGIN
DECLARE @FIRMID INT — DEĞİŞKEN TANIMLAMA

SELECT @FIRMID=(SELECT firm_firmID FROM tbl_Firmalar WHERE firm_firmName=@FIRMNAME) — BURADA İLK SELECT KELİMESİ YERİNE SET İFADESİNİ DE KULLANABİLİRİZ.

Return @FIRMID — SORGUDAN DÖNEN DEĞERİ DÖNDÜRÜYORUZ.
END
GO

FONKSİYONUN ÇALIŞTIRILMASI

EXEC [FN_GETFIRMID] ‘TEST FİRMA’

 

TEXTBOX GİRİŞLERİNİ YÖNETME – PARA DEĞERİ GİRİŞİ KONTROLÜ

Bazı durumlarda text kutularımıza sadece sayısal değer veya para değeri girmemiz gerekebilir.

Örneğin; kullanıcı sisteme ürünün fiyatını girmek istiyor. Bu durumda kullanıcı bazlı hataların önüne geçmek için programımızın ara yüzünde bazı kısıtlamalar yapmamız gerekmektedir. Çünkü kullanıcı bu alana alphanumeric bir değer girdiğinde ve veritabanına bu değer gönderdiğinde program patlayacaktır.

Kullanıcı girişinde kısıtlamayı yapabilmek ve hataların önüne geçebilmek için Regex fonksiyonunu kullanabiliriz. Bu fonksiyon sayesinde girilen karakterler, alan formatımıza uygun mu yoksa değil mi bunun kontrolünü yapabiliyor ve gelen sonuca göre aksiyon alabiliyoruz.

Bu işlemi DevExpress.XtraEditors.TextEdit kontrolü için yapacağız.

TextEdit’ in KeyPress event ini tıklıyoruz.

Bu Event içerisinde ben oluşturduğum Sub’ ları kullandım.

Öncelikle; oluşturduğum ilk Sub imda InStr() fonksiyonunu kullanıyorum.

InStr : Kelimenin, cümlenin veya sayının içerisinde bir karakter veya karakter dizisi aratmamızı ve aratmış olduğumuz karakterin var olup olmadığını var ise kaçıncı haneden itibaren başladığını verir.

Kullanımı: InStr(Kaçıncı karakterden itibaren aramaya başlanacak, nerde aranacak, ne aranacak? )

Örnek Kod:

InStr(1, e.KeyChar, “‘”) Or InStr(1, e.KeyChar, “:”) Or InStr(1, e.KeyChar, “;”)

Bu sayede “’”,”:” ve “;” girişlerini engelliyoruz.

Daha sonra ise Regex() fonksiyonunu kullanıcağız.

Örnek tanımlama:

Dim intRegexPattern As New  _

System.Text.RegularExpressions.Regex(“^[0-9]”)

If Not intRegexPattern.IsMatch(e.KeyChar) Then

e.Handled = True

End If

Dim intRegexPattern As New  _

System.Text.RegularExpressions.Regex(“^[0-9]”)

Dim chrRegexPattern As New  _

System.Text.RegularExpressions.Regex(“^[.,]”)

Dim bsRegexPattern As New  _

System.Text.RegularExpressions.Regex(“\b”)

If Not chrRegexPattern.IsMatch(e.KeyChar) And Not intRegexPattern.IsMatch(e.KeyChar) And bsRegexPattern.IsMatch(e.KeyChar) Then

e.Handled = True

End If

Para değeri girişini kontrol etmek için yazılmış örnek uygulama;

Bu uygulama kodu ile birlikte Regular Expression ( RegEx())  fonksiyonu geçerli bir para değeri verisi girilmesini dolaylı yoldan sağlayacak. Bu sayede veri; grup ayırıcı sembollerini, para birimi sembollerini, ayırıcıları, ondalıklı sayı ayırıcılarını ve negatif- pozitif sayı sembollerini içermeyecek.

Private Sub SimpleButton1_Click(sender As System.Object, e As System.EventArgs) Handles SimpleButton1.Click

Dim nfi As NumberFormatInfo = NumberFormatInfo.CurrentInfo

Dim pattern As String = “”

pattern = “^\s*[”

‘ Pozitif veya Negatif işaret sembollerini getirmemek için gerekli pattern.

pattern += Regex.Escape(nfi.PositiveSign + nfi.NegativeSign) + “]?\s?”

‘ Para birimi sembollerini getirirmemek için gerekli pattern.

pattern += Regex.Escape(nfi.CurrencySymbol) + “?\s?”

‘ Tam sayı örneği.

pattern += “(\d*”

‘ Decimal sayı ayıraçı kontrolü yapan pattern

pattern += Regex.Escape(nfi.CurrencyDecimalSeparator) + “?”

‘ Kesirli sayı.

pattern += “\d{”

‘ Para biriminin kesirli sayının numarasını belirler..

pattern += nfi.CurrencyDecimalDigits.ToString() + “}?){1}$”

Dim rgx As New Regex(pattern)

Dim tests() As String = {“-42”, “19.99”, “0.001”, “100 USD”, _

“.34”, “0.34”, “1,052.21”, “$10.62”, _

“+1.43”, “-$0.23”}

‘ Regular Expression la belirttiğimiz pattern( örnek ) leri baz alarak, her bir test değerini kontrol eder.

Dim lst_Reply As New List(Of String)

For Each test As String In tests

If rgx.IsMatch(test) Then

lst_Reply.Add(“{0} is a currency value.” & test)

Else

lst_Reply.Add(“{0} is not a currency value.” & test)

End If

Next

For i = 0 To lst_Reply.Count – 1

ListBox1.Items.Add(lst_Reply(i).ToString())

Next

End Sub

DEVEXPRESS BUTTONEDIT KONTROLÜ

 

DevExpress ile birlikte tanıştığımız kontrollerden bir tanesi de Button Edit’ tir.

Bu kontrolün tipi tasarım aşamasında değiştirilebiliyor. Bu sayede kontrolü ister ComboBoxEdit ister Button Edit istersek LookUp Edit v.s formatında kullanabiliyoruz.

Şimdi DataSource özelliğinden dolayı LookUpEdit formatını kullanacağım.

Öncelikle formumuza ToolBox’ tan ButtonEdit kontrolünü sürükleyip bırakma (Drag- Drop) yöntemiyle ekliyoruz. Tasarım aşamasında kontrolümüzün tipini “ Change Editor Type ” sekmesinden LookUpEdit olarak değiştiriyoruz.

Özellikler kutusunda aşağıdaki değişiklikleri yapıyoruz.

  • Search Mode -> AutoComplete ( Arama modu-> Ayş yazdığımızda Ayşegül’ ün çıkması gibi)
  • Show Footer -> False ( Alt Başlık alanını görmek istemiyoruz.)
  • Show Header -> False ( Üst Başlık alanını görmek istemiyoruz.)

 

Gelelim kod kısmına;

LookUpEdit e DataSource atama işlemini gerçekleştireceğiz.

 

‘Daha önce oluşturdumuz Function ve Sub ları tutan class. Instance sini oluşturuyoruz.

cls_Islem = New cls_Process

sqlStr = “”

sqlStr = “SELECT [cat_ID], [cat_Name] FROM [AysegulDB].[dbo].[tbl_Categories] WHERE  [cat_IsDeleted]=0″

sqlStr += ” AND [mainCat_isActive]=1″

cls_ Islem.CommandString = sqlStr

‘DataTable oluşturuyoruz.

dt = New DataTable

‘DataTable in içerisini class ımızdan çağırdığımız ve datatable döndüren fonksiyon ile dolduruyoruz.

dt = cls_Islem.GetDataTable

‘LookUpEdit kontrolümüzün DataSource ına Properties ile ulaşıyoruz.

look_AnaKategori.Properties.DataSource = dt

‘Görüntülenmesini istediğimiz alan adı

look_AnaKategori.Properties.DisplayMember = ” cat_Name”

‘Arka planda tutulacak ve veritabanından çağırırken işimize yarayacak alan adı. Genellikle id alanını burada tutuyoruz.

look_AnaKategori.Properties.ValueMember = ” cat_ID”

Kodu bu şekilde derlediğimizde, LookUpEdit kontrolümüzün çalışma zamanında bu şekilde bir görüntüsü olucak.

 

Aşağıdaki şekilde görüldüğü üzere ID alanınıda gösteriliyor.

13

Yalnız bunu kullanıcının görmesine gerek yok. Yapmamız gereken bu alanı gizlemek.

LookUp Edit kontrolde bu işlemi şu şekilde yapıyoruz.

 

Dim lookUp_Info_firmName As New LookUpColumnInfo(“cat_name”, “KATEGORİ ADI”)

Look_Kategori.Properties.Columns.Add(lookUp_Info_firmName)

 

By AyşegülCoşar YAZILIM içinde yayınlandı