ایجاد سطر خالی و مرتب سازی کمبوباکس بایند شده!

kern

Member
سلام.
1. چطور میتونم تو کمبوباکس هایی که ویزاردی بایندشون کردم یه سطر خالی داشته باشم!
منظورم اینه که وقتی فرمم Load شد کمبوباکس ها مقدار نداشته باشن تا بتونم بررسی کنم:
کد:
if(comboBox1.text = "")
2. چطوری میتونم این کمبوباکس ها رو مرتب (Sort) کنم. حالا نزولی یا صعودی!
 
آخرین ویرایش:

the_king

مدیرکل انجمن
سلام.
1. چطور میتونم تو کمبوباکس هایی که ویزاردی بایندشون کردم یه سطر خالی داشته باشم!
منظورم اینه که وقتی فرمم Load شد کمبوباکس ها مقدار نداشته باشن تا بتون چک کنم:
کد:
if(comboBox1.text = "")
2. چطوری میتونم این کمبوباکس ها رو مرتب (Sort) کنم. حالا نزولی یا صعودی!

اصل کار رو باید روی اون منبع داده انجام بدهید، نه روی ComboBox
وقتی منبع داده ای رو در ComboBox ای Bind می کنید خود ComboBox صرفا روی شیوه نمایش آیتم های داده ای مانور میده، تعداد و ترتیب شون دیگه دست ComboBox نیست
(مگر اینکه ComboBox رو OwnerDraw رسم کنید که برای همچین کاربردی هایی منطقی نیست).
شما باید منبع داده ای رو که در ComboBox تون Bind کرده اید مرتب کنید. کاری که اون Wizard انجام داده کار خیلی خاصی نبوده که برای نوشتن کد اش با مشکل مواجه شوید.

معمولا شما یک DataSet روی فرم دارید که داخلش یک یا چند DataTable بوده و شما یکی از اون DataTable ها رو به عنوان DataSource به ComboBox معرفی کرده اید.
یک DisplayMember هم داشته که یکی از فیلد (ستون) های اون جدول بوده.

این DataSet ذاتا تو حافظه Ram قرار داره نه دیسک و بانک اطلاعاتی، یعنی می توانید تغییرش بدهید بدون اینکه الزاما محتویات بانک اطلاعاتی عوض بشه.
مثلا من یک DataSet1 دارم که DataTable1 داخلش قرار داره و یک ستون به نام DataColumn1 داره.
از این DataSet1 من یک شی ds رو فرم ام دارم که یکسری داده داخلشون هست.
حالا می خواهم نسخه مرتب شده ای ds.DataTable1 رو توی comboBox1 نشون بدم، طوری که یک سطر خالی در اولین آیتم بیاد.

با دو سطر زیر من یک نسخه از محتویات DataTable1 رو به صورت صعودی مرتب شده در dt دارم :
کد:
            ds.DataTable1.DefaultView.Sort = "DataColumn1 ASC";
            var dt = ds.DataTable1.DefaultView.ToTable();

ما بعد از اسم ستون نوشتیم ASC تا مرتب سازی صعودی باشه، اگر بجای ASC بنویسید DESC نزولی مرتب اش می کنه.

حالا شما می خواهید یک سطر خالی اول بیاد؟ یک سطر خاص رو که در جدول کاربرد نداره رو به عنوان نشونه سطر خالی اضافه می کنیم، مثلا مقدار ####
کد:
            var r = dt.NewRow();
            r["DataColumn1"] = "####";
            dt.Rows.InsertAt(r, 0);

و به comboBox1 اطلاع می دهیم که #### رو باید بصورت یک سطر خالی نشون بدی :

کد:
            comboBox1.Format += new ListControlConvertEventHandler(comboBox1_Format);
.
.
.
        void comboBox1_Format(object sender, ListControlConvertEventArgs e)
        {
            if ("####".Equals(e.Value))
            {
                e.Value = "";
            }
        }

اگر برای نوشتن رخداد Format از امکانات ویژوال استدیو استفاده کنبد اون سطر =+ comboBox1.Format رو بصورت خودکار داخل کد Designer فرم می نویسه و بصورت عادی شما نمی بینیدش.
وگرنه خودتان می توانید در Form1_Load فرم تان دستی اضافه اش کنید. همینکه تا =+ اش را بنویسید بقیه اش رو بصورت خودکار می نویسه.

حالا فقط مانده که به comboBox1 منبع داده dt را بدهید :
کد:
            comboBox1.DataSource = dt;
            comboBox1.DisplayMember = "DataColumn1";

موقع نمایش #### یک سطر خالی نشون میده در حالی که مقدار واقعی همچنان #### می مونه. اینکار رو برای این انجام می دهید که در منبع داده جدولی سطر خالی مجاز نبوده و نیاز به یک جایگزین داریم.
 

جدیدترین ارسال ها

بالا