Category Archives: .NET

.NET Software Tips

Updated: Setting CommandTimeOut di TableAdapter

Ternyata, object this._adapter lebih sering bernilai null sehingga code dalam partial class table adapter tidak memberikan efek apapun. Namun object this.Adapter ternyata memberikan hasil yang ingin dicapai. Jadi rubah code di tahap 4 yang terdapat disini menjadi:

public int CommandTimeout
        {
            get
            {
                if (this.CommandCollection != null)
                    return (this.CommandCollection[0].CommandTimeout);
                else
                    return 30;
            }

            set
            {
                if (this.Adapter != null)
                {
                    if (this.Adapter.InsertCommand != null)
                        this.Adapter.InsertCommand.CommandTimeout = value;
                    if (this.Adapter.UpdateCommand != null)
                        this.Adapter.UpdateCommand.CommandTimeout = value;
                    if (this.Adapter.DeleteCommand != null)
                        this.Adapter.DeleteCommand.CommandTimeout = value;
                }
                if (this.CommandCollection != null)
                {
                    foreach (System.Data.SqlClient.SqlCommand SelectCommand in this.CommandCollection)
                    {
                        if (SelectCommand != null)
                        {
                            SelectCommand.CommandTimeout = value;
                        }
                    }
                }
            }
        }

.NET Software Tips

Setting CommandTimeOut di TableAdapter

Secara default, TableAdapter menggunakan TimeOut 30s untuk setiap interaksi-nya ke database. Namun ada kalanya suatu transaksi database membutuhkan waktu yang lebih lama dari 30s. Sayangnya TableAdapter tidak menyediakan akses secara langsung ke parameter TimeOut ini karena semua object yang diperlukan untuk interaksi dengan database dibuat secara on the fly saat dibutuhkan.

image
part of generated code at xxx.Designer.cs

Disinilah Partial Class berguna untuk membuat agar CommandTimeOut dapat diakses oleh source code kita.

1. Buka file .xsd tempat TableAdapter yang hendak kita buat agar CommandTimeOut dapat diakses seperti pada gambar dibawah ini;

image

2. Sorot TableAdapter yang diinginkan dan klik kanan. Pilih View Code dari PopUp Menu;

image

3. Visual Studio akan membuka file cs yang sesuai dan akan langsung menunjuk ke arah Partial Class yang relevan;

image

4. Tambahkan code berikut di dalam partial class yang relevan itu:

        public int CommandTimeout
        {
            get
            {
                return (this._adapter.InsertCommand.CommandTimeout);
            }

            set
            {
                this._adapter.InsertCommand.CommandTimeout = value;
                this._adapter.UpdateCommand.CommandTimeout = value;
                this._adapter.DeleteCommand.CommandTimeout = value;
                foreach (System.Data.SqlClient.SqlCommand SelectCommand in this._commandCollection)
                {
                    if (SelectCommand != null)
                    {
                        SelectCommand.CommandTimeout = value;
                    }
                }
            }
        }

5. Simpan dan tutup file tersebut

6. Sekarang anda sudah dapat mengakses CommandTimeOut dari TableAdapter di dalam source code. Contoh di bawah ini merubah TimeOut menjadi 120s atau 2 menit.

image

.NET Software Tips Windows

How to set default browser in Visual Studio 2008

Ok, I always forgot how to this from time to time and I think its time for me to write it down. It happens every time I change my default browser from IE to Firefox or to Chrome. So I usually turn off their annoying `please make me your default browser` dialog box. But each time I upgrade the browser to the latest version they suddenly asking that question again or worst…

Anyway… I don’t know how, but its affecting the default browser in my Visual Studio Web Development IDE too. So sometimes when I run a web apps from my Visual Studio, it would run on a different browser that I don’t want it to be run in. And trying to set it the default browser could takes minutes cause I always forgot how to do it… but actually it’s very easy.

read more »

.NET Software Windows

Read SMTP configuration in System.Net.Mail

System.Net.Mail can configure itself using special settings at our application configuration. This is an example of node sample at configuration file:

<system.net>
    <mailSettings>
      <smtp from="info@isnandi.net">
        <network host="localhost" password="test" userName="dony" />
      </smtp>
    </mailSettings>
  </system.net>

read more »

.NET Tips Windows

Mengambil server control identifier yang dihasilkan ASP.NET

VS2008

ID yang kita berikan pada server control property di saat development biasanya tidak dapat digunakan secara sepenuhnya oleh ASP.NET. Karena itulah ASP.NET kemudian meng-generate ID sendiri yang biasanya merupakan gabungan dari ID parent dari container tempat server control itu berada dan ID dari server control itu.

Untuk mengakses nilai ID yang dibuat oleh ASP.NET secara otomatis saat runtime, kita dapat menggunakan Control.ClientID dan Control.UniqueID. Perbedaan dari kedua property ini terletak pada karakter pemisah antara bagian dari ID yang digenerate.

Sebagai contoh, misalkan kita meletakkan sebuah DropDown ber-ID DropDown1 kedalam sebuah panel ber-ID Panel1 maka

Control.ClientID-nya akan bernilai ct100_Panel1_DropDown1

dan

Control.UniqueID-nya akan bernilai ct100$Panel1$DropDown1

.NET Software Engineer Tips Windows

Error `Session state has created a session id, but cannot save it because the response was already flushed by the application.` di ASP.NET

Beberapa waktu belakangan ini saya sering menemukan pesan error:

Session state has created a session id, but cannot save it because the response was already flushed by the application.

Padahal setelah check recheck di semua bagian dari page tidak ditemukan command Response.Redirect atau Server.Transfer. Bilapun ada, saya sudah menonaktifkan semua command tersebut.

Tracking di pesan error yang ditampilkan agak kurang bermanfaat, karena semua pesan error yang ada menunjukkan posisi error berada di code ASP.NET bukan di code saya.

Pesan error ini pun muncul hanya pada saat session baru kick-in. Bila page di refresh maka pesan error tersebut akan hilang.. lenyap. So, dugaan kuat error ini berhubungan dengan event Session Start. Akhirnya saya pun menilik ke arah Global Application Class (global.asax) dan melakukan tracing di event Session Start. Setelah trial dan error akhirnya terpikir untuk mencoba mengakses nilai SessionID dari object Session dengan asumsi bahwa bila nilai SessionID sama dengan null berarti session id memang belum dibuat saat aplikasi mulai. Untuk melakukannya, saya meletakkan kode:

if (string.IsNullOrEmpty(Session.SessionID))
           throw new Exception("No new session created");

pada event Session_Start di file global.asax.

Build and run the application then voila… error tersebut tidak pernah muncul lagi.

.NET Tips Windows

Kombinasi Textbox – Button sederhana dari ComboBox

[Sample dari aplikasi ini bisa di download disini.]

Kombinasi Textbox-Button biasanya banyak digunakan untuk menampilkan sebuah form dialog isian yang kemudian hasil output dari form dialog tersebut diletakkan di bagian textbox. Salah satu contoh yang paling banyak digunakan adalah SaveFileDialog, LoadFileDialog dan lain sebagainnya. Dan biasanya kita cukup meletakkan sebuah control button di sebelah control textbox, melakukan pengaturan antara kedua control tersebut (jarak, size, style etc.) dan selesailah.

 
[Textbox-Button yang berasal dari kombinasi Textbox dan Button control]

Kombinasi tersebut kemudian dijadikan UserControl sehingga dapat digunakan di berbagai project lainnya dengan lebih mudah.

ComboBox look alike

Sayangnya saya kurang puas, terutama karena kurangnya integrasi button dengan textbox. Saya ingin lebih mirip ComboBox yang merupakan standard dari Windows.Forms.

[Textbox-Button yang berasal dari ComboBox]

[1]

Yang pertama saya lakukan adalah meng-intercept event OnDropDown untuk menghindari munculnya bagian dropdown dari combobox. Ternyata tidak mudah dan masih selalu terlihat adanya bagian dari ComboBox yang muncul. Dan sayangnya nilai ini tidak boleh diberi angka 0.

protected override void OnDropDown(EventArgs e)

{

    // Make sure that no drop down shown

    this.DropDownWidth = 1;

    this.DropDownHeight = 1;

    base.OnDropDown(e);

}

[2]

Kemudian saya membuat event untuk meng-handle pada saat bagian button dari combobox di click oleh user.

public event EventHandler ButtonClick;

protected void OnButtonClick(EventArgs e)

{

    EventHandler handler = ButtonClick;

    if (handler != null)

    {

        handler(null, e);

    }

}

[3]

Terakhir, saya meng-intercept event OnClick dari ComboBox untuk menyelipkan code untuk memanggil event OnButtonClick. Hal ini bisa dideteksi dengan melakukan pemeriksaan terhadap properties DroppedDown dari ComboBox.

protected override void OnClick(EventArgs e)

{

    // Raise the ButtonClick only if the button is clicked

    if (this.DroppedDown)

    {

        this.DroppedDown = false;

        OnButtonClick(e);

    }

    base.OnClick(e);

}

[4]

Selanjutnya cukup melakukan kompilasi library dan TextBoxButton ini akan tersedia di Toolbox. Drag-drop ke bagian design dan anda dapat langsung menggunakannya.

[Pengembangan]

Masih banyak yang bisa dikembangkan. Karena TextBoxButton ini merupakan turunan dari ComboBox maka membuatnya menjadi data-aware control, padahal kita tidak memerlukannya. Serta beberapa fitur ComboBox lain yang tidak kita perlukan.

Bagi yang ingin mencobanya bisa download kode lengkap dan contoh penggunaannya disini.

.NET Tips Windows

Draw Rounded Rectangle menggunakan GDI+ di C#

Semakin sering kita melihat banyak orang yang hendak menggambar kotak dengan sudut yang melengkung atau Rounded Rectangle. Namun ternyata .NET Framework tidak menyediakan fungsi untuk menggambar rounded rectangle ini. Setelah mencoba-coba dan mencari informasi di Google, akhirnya saya menemukan dan kemudian menyempurnakan fungsi untuk menggambar rounded rectangle ini.

public void DrawRoundedRectangle(Graphics canvas, Pen pen, Rectangle rect, int RoundWidth, int RoundHeight)
{
// Make a container for our rounded rectangle figure
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
// Draw all the rounded corner
gp.AddArc(rect.X, rect.Y, RoundWidth, RoundHeight, 180, 90);
gp.AddArc(rect.X + rect.Width – RoundWidth, rect.Y, RoundWidth, RoundHeight, 270, 90); gp.AddArc(rect.X + rect.Width – RoundWidth, rect.Y + rect.Height – RoundHeight, RoundWidth, RoundHeight, 0, 90);
gp.AddArc(rect.X, rect.Y + rect.Height – RoundHeight, RoundWidth, RoundHeight, 90, 90);
// Close the drawing and make sure that all the open line are closed
gp.CloseFigure();
// draw to graphics using provided pen
canvas.DrawPath(pen, gp);
}