نمایش نتایج 1 تا 17 از 17

نام تاپیک: ساخت گرید ویو با UserControl در سی شارپ

  1. #1

    ساخت گرید ویو با UserControl در سی شارپ

    سلام به همه اساتید گرامی

    دوستان من توسی شارپ با استفاده از Usercontrol یه گرید ویو طراحی کرده ام به این صورت که اگر جدول من شامل 100 تا رکورد باشه گرید ویو به صورت خودکار از 1 تا 10 صفحه بندی خواهد شد و تو هر صفحه 10 تا رکورد رو نمایش میده منتها مشکلی که اینجا وجود دارد رو هر شماره که کلیک میکنم یه چند ثانیه برنامه مکث میکنه بعد نمایش میده دوستان چه چیزی پیشنهاد میدید که با سرعت و بدون مکث این عمل انجام یشه ، چون من تو کدها مثلا اگه بخام رکورد 1 تا 10 رو با شماره گذاری 1 نمایش بدم باید یه حلقه for بنویسم از 1 تا 10 رو از جدول بخونه بعد سطر به سطر نشون بده . دوستان ممنون میشم یه راهنمایی بفرمایید

  2. #2

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    سلام به همه اساتید گرامی

    دوستان من توسی شارپ با استفاده از Usercontrol یه گرید ویو طراحی کرده ام به این صورت که اگر جدول من شامل 100 تا رکورد باشه گرید ویو به صورت خودکار از 1 تا 10 صفحه بندی خواهد شد و تو هر صفحه 10 تا رکورد رو نمایش میده منتها مشکلی که اینجا وجود دارد رو هر شماره که کلیک میکنم یه چند ثانیه برنامه مکث میکنه بعد نمایش میده دوستان چه چیزی پیشنهاد میدید که با سرعت و بدون مکث این عمل انجام یشه ، چون من تو کدها مثلا اگه بخام رکورد 1 تا 10 رو با شماره گذاری 1 نمایش بدم باید یه حلقه for بنویسم از 1 تا 10 رو از جدول بخونه بعد سطر به سطر نشون بده . دوستان ممنون میشم یه راهنمایی بفرمایید
    از قابلیت VirtualMode در DataGridView استفاده کنید، اگر درست اجرا بشه علاوه بر سرعت بالا حتی دیگه نیازی به صفحه بندی نخواهد بود.
    رجوع شود به :
    افزایش سرعت پردازش برنامه در C#‎

  3. #3

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    ممنون از پاسختون دوست عزیز اما GridView من کنترل پیش فرض ویژوال استودیو و یا کنترل های آماده نیست من خودم یه پنل آوردم که تو این پنل آیتم ها زیر هم قرار میگیره و به شکل یه گرید ویو سطرهای یه جدول رو نشون میده حالا من برای اینکه بخام سرعت و پردازش داده ها رو تسریع ببخشم باید چکار کنم

  4. #4

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    ممنون از پاسختون دوست عزیز اما GridView من کنترل پیش فرض ویژوال استودیو و یا کنترل های آماده نیست من خودم یه پنل آوردم که تو این پنل آیتم ها زیر هم قرار میگیره و به شکل یه گرید ویو سطرهای یه جدول رو نشون میده حالا من برای اینکه بخام سرعت و پردازش داده ها رو تسریع ببخشم باید چکار کنم
    ایتم ها صرفا نمایشی هستند؟ نمایش کادر و متن با Graphics به مراتب سریعتر و با حافظه مورد نیاز کمتر نسبت از اضافه کردن تعداد زیادی کنترل ئه. به اصطلاح تا جایی که ممکنه Windowless کار کنید، کنترل هایی که اضافه می کنید پنجره دارند، مدیریت پنجره حافظه بیشتری میخواد و سربار پردازشی داره.

  5. #5

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    ممنون از پاسختون دوست عزیز ، من عکس هاشو گذاشتم شما ملاحظه بفرمایید به عنوان مثال من تو صفحه 1 جدولم هستم و میخام صفحه 2 رو ببینم اول میاد به ترتیب زیر سطر به سطر قرار میده منتها تو اون لحظه صفحه واسه چند ثانیه هنگ میکنه ممنون میشم راهنمایی کنید

  6. #6

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    ممنون از پاسختون دوست عزیز ، من عکس هاشو گذاشتم شما ملاحظه بفرمایید به عنوان مثال من تو صفحه 1 جدولم هستم و میخام صفحه 2 رو ببینم اول میاد به ترتیب زیر سطر به سطر قرار میده منتها تو اون لحظه صفحه واسه چند ثانیه هنگ میکنه ممنون میشم راهنمایی کنید.
    سه تا سوال دارم.
    • برنامه Windows Forms یا WPF ئه؟
    • موقعی که روی دکمه صفحه 2 کلیک میشه چیکار می کنید؟ با ()Panel.Controls.Clear محتویات Panel رو پاک می کنید و بعد تک تک کنترل های جدید رو به داخل Panel اضافه می کنید؟ یا بجای اینکار کنترل های بجا مونده از صفحه قبلی رو حفظ می کنید و صرفا متن شون رو مطابق با اطلاعات صفحه جدید تغییر می دهید؟
    • موقعی که میخواد صفحه دیگری انتخاب بشه، اطلاعات مورد نیاز اون سطر های اون صفحه از قبل آماده و موجود ئه یا تازه قراره بعد از کلیک کردن داده های صفحه از بانک اطلاعاتی یا شبکه دریافت بشه؟

  7. #7

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    سلام مجدد خدمت شما دوست گرامی

    من برنامه رو با WinForms نوشتم

    ببینید دوست خوبم من طیق فرمایش شما موقعی که روی دکمه صفحه 2 کلیک میکنم کنترل های داخل پنل با دستور panel.controls.clear پاک میشه و بعد تک تک کنترل های جدید به پنل اضافه یشه ، سوال بعدیتون که فرموده بودید اطلاعات مورد نیاز سطرها از قبل آماده هستش یا از پایگاه داده فراخوانی میشه ، نه اطلاعات هر صفحه از پایگاه داده فراخوانی و به پنل اضافه میشه .

    ممنون میشم راه حل بهینه و استانداری پیشنهاد بدید، بسیار سپاسگذارم ازتون

  8. #8

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    سلام مجدد خدمت شما دوست گرامی

    من برنامه رو با WinForms نوشتم

    ببینید دوست خوبم من طیق فرمایش شما موقعی که روی دکمه صفحه 2 کلیک میکنم کنترل های داخل پنل با دستور panel.controls.clear پاک میشه و بعد تک تک کنترل های جدید به پنل اضافه یشه ، سوال بعدیتون که فرموده بودید اطلاعات مورد نیاز سطرها از قبل آماده هستش یا از پایگاه داده فراخوانی میشه ، نه اطلاعات هر صفحه از پایگاه داده فراخوانی و به پنل اضافه میشه .

    ممنون میشم راه حل بهینه و استانداری پیشنهاد بدید، بسیار سپاسگذارم ازتون
    این همون DataGridView استاندارد Windows Forms ئه، بدون کوچکترین دستکاری در کلاس اش :
    Preview.png
    تنها کاری که انجام می دهیم اینه که روال رسم اش رو تغییر می دهیم. مثل نمایش تاریخ شمسی و نمایش عنوان و محتویات سطر ها.
    وگرنه مرتب سازی، تغییر اندازه ستون ها و ... همه مال خود کلاس DataGridView میمونه، بهشون دست نمی زنیم.
    ببینید وقتی 1000 تا سطر بهش اضافه میشه و مرتب سازی بر اساس یک ستون انتخابی رو انجام میده اون یکی دو ثانیه سکته رو می کنه؟

    DataGridView2Sample.rar

    تا جایی که امکانش هست از ساختن کنترل های جدید روی فرم اجتناب کنید. اگر DataGridView کارتون رو راه می اندازه ازش استفاده کنید و اگر نمیشه با Graphics خودتون رسم کنید. بخاطر نمایش صرفا چند تا متن و آیکون کنترل اضافه نکنید، سربار رسم و مدیریت شون زیاده.

  9. #9

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    ممنون از پاسختون دوست گرامی 3 تا سوال دیگه :

    1- حالا من اگه بخام به جای شماره موضوع ها یعنی اعداد 189 ، 871 و ... کنترل checkbox و یا هرکنترل دیگه ای درج کنم باید از چه دستوری برای اینکار استفاده کنم.

    2- اگه بخام "پاسخ داده شد" رو سبز نشون بدم ، "بسته شد" رو قرمز و "منتظر پاسخ " رو زرد نشون بدم باید چکار کنم

    3- شماره بندی صفحه رو باید چکار کنم طوری که 1000 تا رکوردمو تو 10 صفحه به صورت خودکار صفحه بندی کنه


    ممنون میشم راهنمایی بفرمایید
    آخرین ویرایش به وسیله arastoahmadi : دوشنبه 22 اردیبهشت 1399 در 15:53 عصر

  10. #10

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    ممنون از پاسختون دوست گرامی 3 تا سوال دیگه :

    1- حالا من اگه بخام به جای شماره موضوع ها یعنی اعداد 189 ، 871 و ... کنترل checkbox و یا هرکنترل دیگه ای درج کنم باید از چه دستوری برای اینکار استفاده کنم.
    اگر مساله صرفا نمایش باشه که رسم می کنید، مثلا اون شماره سطر فقط رسم ئه، کنترلی نداره.
    اما اگر قراره بجز نمایش کاری هم انجام بده، مثلا با کلیک تیک اش تغییر کنه، در انواع دلخواه تون ستون اضافه می کنید.
    در DataGridView نوع DataGridViewTextBoxColumn پیشفرض ئه که TextBox ئه ولی می توانید ستون های دیگری مثل DataGridViewCheckBoxColumn رو اضافه کنید که یک CheckBox ئه. اگر خواستید با رسم پیشفرض انجام بشه، باید در رخداد DataGridView.CellPainting جلوی e.Handled = true رو برای اون ستون بگیرید، چون اگه e.Handled = true بشه دیگه رسم پیشفرض CheckBox رو انجام نمیده. مثلا اگر ستون اندیس 3 یک ChecknBox ئه :

    private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
    if ((e.RowIndex < -1) || (e.RowIndex >= dataGridView1.RowCount) || (e.ColumnIndex < 0) || (e.ColumnIndex >= dataGridView1.Columns.Count))
    {
    return;
    }
    if ((e.ColumnIndex == 3) && (e.RowIndex >= 0))
    {
    return;
    }
    e.Handled = true;
    .
    .
    .



    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    2- اگه بخام "پاسخ داده شد" رو سبز نشون بدم ، "بسته شد" رو قرمز و "منتظر پاسخ " رو زرد نشون بدم باید چکار کنم
    رنگ بندی جالبی نمیشه اما به هر حال برای Brush ای که در DrawString بکار میره (textBrush) شرط میذارید، مثلا :

    e.Graphics.FillRectangle((selected) ? Brushes.LightBlue : ((e.RowIndex % 2 == 0) ? Brushes.WhiteSmoke : Brushes.White), e.CellBounds);
    Brush textBrush;
    switch (e.ColumnIndex)
    {
    case 3:
    switch (text)
    {
    case "بسته شده":
    textBrush = Brushes.Red;
    break;
    case "پاسخ داده شد":
    textBrush = Brushes.ForestGreen;
    break;
    case "منتظر پاسخ":
    textBrush = Brushes.Yellow;
    break;
    default:
    textBrush = Brushes.Black;
    break;
    }
    break;
    default:
    textBrush = Brushes.Black;
    break;
    }
    var format = new StringFormat(StringFormat.GenericDefault);


    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    3- شماره بندی صفحه رو باید چکار کنم طوری که 1000 تا رکوردمو تو 10 صفحه به صورت خودکار صفحه بندی کنه
    یک لیست برای نگهداری تمامی سطر ها داشته باشید، مثل private List<DataGridViewRow> _rows که موقع نمایش هر صفحه با خیال راحت محتویات قبلی DataGridView رو حذف کنه و فقط همون 10 سطر رو در DataGridView درج کنه.

  11. #11

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    سلام

    دوست عزیز صمیمانه از شما به خاطر لطف و راهنماییتون تشکر و قدردانی میکنم ، پس طبق فرمایش شما برای درج کنترل در گرید ویو باید حتما یه ستون بهش اختصاص داده بشه یعنی از طریق رویداد Painting امکان پذیر نیست ؟

    بعد من از کامپوننت های DevExpress و .net Component استفاده میکنم که کنترل های جالبی هم داره و من میخام از این کنترل ها در گرید ویو استفاده کنم به عنوان مثال برای درج دکمه در گرید ویو من تاجایی که با گرید ویو کار کردم از کنترل های پیش فرض سی شارپ استفاده میکنه البته من خیلی با گرید ویو آشنایی ندارم شاید راهی باشه که بشه از کنترل های DevExpress نیز استفاده کرد ممنون میشم منو راهنمایی کنید.

  12. #12

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    قسمت کد تغییر رنگ رو توی کدوم خاصیت باید نوشت

  13. #13

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    سلام

    دوست عزیز صمیمانه از شما به خاطر لطف و راهنماییتون تشکر و قدردانی میکنم ، پس طبق فرمایش شما برای درج کنترل در گرید ویو باید حتما یه ستون بهش اختصاص داده بشه یعنی از طریق رویداد Painting امکان پذیر نیست ؟
    Painting رسم ئه، می نوانید داخلش CheckBox ای رو رسم کنید اما فقط عکس CheckBox ئه، کنترل نیست. درج کنترل اصلا ارتباطی با رسم DataGridView نداره.
    اگر بخواهید CheckBox ئه کار کنه، با کلیک کردن تیک اش تغییر کنه، موقعی که ماوس رویش میره رنگش تغییر کنه و ... باید ستونی برای اینکار داشته باشید. می توانید از صفر CheckBox بسازید ولی دلیلی نداره چرخ رو از نو اختراع کنید.


    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    بعد من از کامپوننت های DevExpress و .net Component استفاده میکنم که کنترل های جالبی هم داره و من میخام از این کنترل ها در گرید ویو استفاده کنم به عنوان مثال برای درج دکمه در گرید ویو من تاجایی که با گرید ویو کار کردم از کنترل های پیش فرض سی شارپ استفاده میکنه البته من خیلی با گرید ویو آشنایی ندارم شاید راهی باشه که بشه از کنترل های DevExpress نیز استفاده کرد ممنون میشم منو راهنمایی کنید.
    فکر نکنم بتوانید کنترل هایی که با هم سازگار نیستند رو ترکیب کنید.

  14. #14

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    نقل قول نوشته شده توسط mrsp1988 مشاهده تاپیک
    قسمت کد تغییر رنگ رو توی کدوم خاصیت باید نوشت
    هیچ مشخصه ای، در کدتون یک سطر برای تعریف و مقدار دهی textBrush داشتید که خیلی ساده بود :

    var textBrush = (e.ColumnIndex == 3) ? Brushes.Gray : Brushes.Black;

    که اون رو توسعه می دهید :

    Brush textBrush;

    switch (e.ColumnIndex)

    {

    case 3:

    switch (text)

    {

    case "بسته شده":
    textBrush = Brushes.Red;

    break;

    case "پاسخ داده شد":

    textBrush = Brushes.ForestGreen;

    break;

    case "منتظر پاسخ":
    textBrush = Brushes.Yellow;
    break;

    default:

    textBrush = Brushes.Black;

    break;

    }

    break;

    default:

    textBrush = Brushes.Black;

    break;

    }


  15. #15

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    دوست عزیز به خدا نمیتونم چطوری تشکر کنم ازتون خیلی پرفکت بود توضیحتون ، ولی بحث گرید ویو یه مقدار گیج کننده س واقعا ، من فقط میخام بگم که وقتی تو انی دسک به هزاران سیستم ریموت میشیم این تو کش انی دسک میمونه و جالب اینکه فکر کنم اطلاعات کانکشن سیستم از راه دور رو به صورت RealTime نشون میده ، اگه شکل زیرو ملاحظه بفرمایید آی دی مشتریا مثل رکوردهای گرید ویو زیر هم قرار گرفته با این تفاوت که داخل آن کنترل های وجود داره که جنبه نمایشی نداره بلکه میتونی عملیاتی از قبیل کانکت شدن و سایر موارد رو انجام داد که میتونید در شکل زیر مشاهده کنید میخواستم بدونم آیا واقعا این گرید ویو هستش یا یه پنله یا یه کنترل دیگه س اگه من بخام اطلاعات مشریامو به این شکل نمایش بدم باید از چه کنترلی استفاده کنم


    anydesk1.JPG


    anydesk2.jpg

    دوستان تو این از چه کنترل هایی استفاده شده که بسیار سریع اطلاعات میلیون ها مشتری رو لیست خواهد کرد

  16. #16

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    نقل قول نوشته شده توسط arastoahmadi مشاهده تاپیک
    دوست عزیز به خدا نمیتونم چطوری تشکر کنم ازتون خیلی پرفکت بود توضیحتون ، ولی بحث گرید ویو یه مقدار گیج کننده س واقعا ، من فقط میخام بگم که وقتی تو انی دسک به هزاران سیستم ریموت میشیم این تو کش انی دسک میمونه و جالب اینکه فکر کنم اطلاعات کانکشن سیستم از راه دور رو به صورت RealTime نشون میده ، اگه شکل زیرو ملاحظه بفرمایید آی دی مشتریا مثل رکوردهای گرید ویو زیر هم قرار گرفته با این تفاوت که داخل آن کنترل های وجود داره که جنبه نمایشی نداره بلکه میتونی عملیاتی از قبیل کانکت شدن و سایر موارد رو انجام داد که میتونید در شکل زیر مشاهده کنید میخواستم بدونم آیا واقعا این گرید ویو هستش یا یه پنله یا یه کنترل دیگه س اگه من بخام اطلاعات مشریامو به این شکل نمایش بدم باید از چه کنترلی استفاده کنم دوستان تو این از چه کنترل هایی استفاده شده که بسیار سریع اطلاعات میلیون ها مشتری رو لیست خواهد کرد
    میلیون که سهله، اون مثالی که در پست دوم گذاشته بودم رو اگه ببینید 9223372036854775807 تا سطر رو بدون وقفه اسکرول می کنه.
    هر کنترلی که اجازه نمایش داده از منبع مجازی رو بده (مثل قابلیت Virtual Mode در DataGridView) میتونه میلیون ها سطر رو به سادگی مدیریت کنه.
    هر کنترلی هم که اجازه رسم اختصاصی (Owner Draw) رو بده (مثل DataGridView.CellPainting) میتونه هر نمایشی داشته باشه.
    مثلا این مثال رو ببینید :
    نقل قول: مشکل تایمر در لیست ویو
    ضمیمه 151477
    اون دکمه ها Button نیستند، چون اصلا ListView برای قرار دادن دکمه داخلش طراحی نشده که بخواهیم کنترل دکمه داخلش قرار بدهیم.
    فقط با کد نویسی دکمه داخلش رسم می کنیم، کلیک اش هم کار می کنه، با Hover ماوس ظاهرش هم عوض میشه و ... ولی چون با کد نویسی اینکار رو می کنیم، نه اینکه از اول ListView بتونه دکمه نشون بده.
    یا مثلا این نمونه رو ببینید :
    نقل قول: بدست آوردن کد اسکی کاراکترهای کلمات فارسی بصورت یونیکد
    ضمیمه 151040
    رسم ComboBox و ListBox تغییر کرده تا Glyph کاراکتر ها رو با یک کادر دور شون نشون بده. ListBox ئه ولی دیگه ظاهرش شباهتی به ListBox عادی نداره.
    یا مثلا این برنامه :
    نقل قول: سوال درباره ی اجرای چند نخی و استفاده از چند هسته بصورت همزمان
    ضمیمه 151028
    اون کادر بزرگ فقط یک PictureBox ساده است، کنترل Diagram و ProgressBar ای در کار نیست.
    منظورم از این مثال ها اینه که از مشخصات ظاهری یک کنترل مثل ListView و ListBox و ... روی قابلیت هاش قضاوت نکنید، ممکنه یک ظاهر پیچیده و با جزئیات پشتش یک کنترل پیش پا افتاده معمولی باشه.

  17. #17

    نقل قول: ساخت گرید ویو با UserControl در سی شارپ

    ممنون از پاسختون دوست عزیز

    مثال هایی خیلی خیلی عالی و جالبی بود بسیار متشکرم از تون فقط برای صفحه بندیش نمیدونم چکار باید بکنم و مطلب بعدی اینکه میخام زمانی که کاربر روی شماره موضوعات کلیک کرد رنگ اون شماره موضوع تغییر کنه مثلا الان که خاکستریه میخام زمانی که کلیک کرد رنگش قرمز باشه فقط میخام رنگ شماره موضوعات تغییر پیدا کنه یعنی خود رنگ متن موضوعات همونجوری باقی بمونه
    آخرین ویرایش به وسیله arastoahmadi : چهارشنبه 24 اردیبهشت 1399 در 11:36 صبح

تاپیک های مشابه

  1. راهنمایی در موردUserControl در سی شارپ
    نوشته شده توسط arastoahmadi در بخش C#‎‎
    پاسخ: 3
    آخرین پست: دوشنبه 08 اردیبهشت 1399, 07:52 صبح
  2. سوال: ایجاد usercontrol در سی شارپ
    نوشته شده توسط تبسم ساینا در بخش C#‎‎
    پاسخ: 10
    آخرین پست: یک شنبه 22 اسفند 1395, 13:28 عصر
  3. سوال: موارد استفاده از usercontrol در سی شارپ
    نوشته شده توسط mohamadjon در بخش C#‎‎
    پاسخ: 4
    آخرین پست: جمعه 22 آذر 1392, 17:50 عصر
  4. سوال: دسترسی و تغییر یک usercontrol از طریق یک usercontrol دیگر
    نوشته شده توسط hamidhws در بخش Silverlight
    پاسخ: 6
    آخرین پست: چهارشنبه 13 شهریور 1392, 01:41 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •