صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 44

نام تاپیک: مشکل delay در جستجو هنگام تایپ داخل textbox

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    مشکل delay در جستجو هنگام تایپ داخل textbox

    سلام دوستان یک دیتابیس با 1 میلیون رکورد ساخته شده که 100 درصد بیشتر هم میشه ولی خب 1 میلیون دیتا تستی هست.

    ی تکست باکس هست ک عمل فیلتر کردن روی دیتاگرید ویو رو با دستور like در sql انجام میده و برنامه رو با ado.net کد زدم.

    بهرحال موقع تایپ با وجود صفحه بندی در دیتاگرید چون کمی زمان بر هست جستجو و fill کردن دیتاگرید بین تایپ هر حرف ی تاخیر یا به اصطلاح انگاری هنگ کردن داره!!!!
    چطوری میشه با ترید یا خود بک گراند ورکر اینو هندل کرد جوری که مشکل ساز نشه

    دوستان چون تا حالا کار نکردم این بحث رو ممنون میشم دوستان کدشو برام بفرستین یا ایدی تلگرام بدید ریموت بشید عملی مشاهده کنید .

    تصویری هم ضمیمه کردم
    عکس های ضمیمه عکس های ضمیمه

  2. #2
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    دوستان در این مورد کسی نمیتونه کمک کنه کارم گیر

  3. #3

    نقل قول: مشکل delay در تایپ داخل textbox

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

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مهر 1387
    محل زندگی
    خوزستان، دزفول
    پست
    243

    نقل قول: مشکل delay در تایپ داخل textbox

    سلام دوست عزیز
    من با این مسئله زیاد مواجه بودم
    کلا اینکه تمام بار رو بندازی به دوش sql کار اشتباهیه
    بخصوص اینکه دستور like بسیار بسیار کند عمل میکنه
    ابتدا دیتابیس رو در یه DataTable فراخوانی کن. بعد دیتاتیبل رو فیلتر کن
    برای مثال:
    DataTable DT; //اینجا جدول رو از دیتابیس بخونید

    if (Search_Edit.Text.Length > 0)
    {
    string Filter = "";
    Filter += " (FName Like '%" + Search_Edit.Text.Replace(" ", "%' and FName Like '%") + "%') ";
    Filter += " or ";
    Filter += " (LName Like '%" + Search_Edit.Text.Replace(" ", "%' and LName Like '%") + "%') ";
    string Sort = "ID asc";
    DataView DV = new DataView(DT, Filter, Sort, DataViewRowState.CurrentRows);
    DGV.DataSource = DV;
    }
    else
    {
    string Sort = "ID asc";
    DataView DV = new DataView(DT);
    DGV.DataSource = DV;
    }

  5. #5

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط skflower مشاهده تاپیک
    سلام دوست عزیز
    من با این مسئله زیاد مواجه بودم
    کلا اینکه تمام بار رو بندازی به دوش sql کار اشتباهیه
    بخصوص اینکه دستور like بسیار بسیار کند عمل میکنه
    ابتدا دیتابیس رو در یه DataTable فراخوانی کن. بعد دیتاتیبل رو فیلتر کن
    دوست عزیز اگه از دیتابیس کار نکشیم پس به چه دردی میخوره؟ یعنی شما دیتابیس رو فقط یه مکان برای ذخیره سازی در نظر گرفتی؟ خیر این دید درست نیست، اتفاقا دیتابیس ها برای این طراحی شدن که ازشون کار بکشی و در این زمینه ها مشکلی براشون پیش نمیاد....
    برای راه حلی که شما گفتی تمامی اطلاعات دیتابیس رو بیاری توی دیتاتیبل، شما فک کن 1 میلیون رکورد رو بدون هیچ فیلتری بیاری توی رم کلاینت و اونجا بیای روش فیلتر و جستجو انجام بدی و حالا همین حالت رو در برنامه تحت شبکه در نظر بگیر، میدونی چه فاجعه ای به بار میاد؟؟؟؟ یعنی شما ترجیح میدی یه باری از دیتابیس کم کنی اما کل اطلاعات رو بیاری رو رم کلاینت بدبخت؟؟؟ که معمولا هم کلاینت ها کامپیوترهای ضعیفی هستن و بدون شک برای رکوردهای میلیونی برنامه کرش میکنه

  6. #6
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    سلام دوست عزیز شما بهتره اول دیتابیست رو بهینه طراحی کنی بعد اگه دیتابیس بهینه هم جوابگو نبود اون موقع بری سراغ ترد، که در این مورد اصلا ترد هیچ کار خاصی نمیکنه فقط از هنگ کردن جلوگیری میکنه نه اینکه سرعت لود رو بیشتر کنه
    حالا درمورد بهینه سازی، اول باید روی ستون هایی که قراره جستجو بر اساسشون انجام بشه index گذاری کنی، ایندکس گذاری رو میتونم با یه مثال ملموس بهت توضیح بدم که چیکار میکنه، یه دیکشنری رو در نظر بگیر که کلمات داخل دیکشنری براساس حرف اول هر کلمه دسته بندی شدن، ایندکس گذاری در دیتابیس هم دقیقا همین کارو میکنه و توی عملیات جستجو خیلی کمک میکنه

    سلام ممنون بابت پاسخ

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

    این اموزش خوب؟
    لینک اول

    آخرین ویرایش به وسیله mrhunter : سه شنبه 21 خرداد 1398 در 17:30 عصر دلیل: اضافه کردن لینک

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط skflower مشاهده تاپیک
    سلام دوست عزیز
    من با این مسئله زیاد مواجه بودم
    کلا اینکه تمام بار رو بندازی به دوش sql کار اشتباهیه
    بخصوص اینکه دستور like بسیار بسیار کند عمل میکنه
    ابتدا دیتابیس رو در یه DataTable فراخوانی کن. بعد دیتاتیبل رو فیلتر کن
    برای مثال:
    DataTable DT; //اینجا جدول رو از دیتابیس بخونید

    if (Search_Edit.Text.Length > 0)
    {
    string Filter = "";
    Filter += " (FName Like '%" + Search_Edit.Text.Replace(" ", "%' and FName Like '%") + "%') ";
    Filter += " or ";
    Filter += " (LName Like '%" + Search_Edit.Text.Replace(" ", "%' and LName Like '%") + "%') ";
    string Sort = "ID asc";
    DataView DV = new DataView(DT, Filter, Sort, DataViewRowState.CurrentRows);
    DGV.DataSource = DV;
    }
    else
    {
    string Sort = "ID asc";
    DataView DV = new DataView(DT);
    DGV.DataSource = DV;
    }
    والا اطلاعات که خود به خود توی دیتاتیبل و اونجا fill میشه ولی اینکه کل عملیات فیلترینگ و... روی خودش انجام بده خیر و دیتابیس به نظرم بهتر مدیریتش میکنه اینو تا رم

    و این‌جوری دیگه دیتابیس فک کنم فقط کارش میشه بخور و بخواب

    حالا اگر روش بهتر و با ترید میدونید که بشه فقط جلوی این تاخیر توی تایپ رو گرفت به هر نحوی ممنون میشم بگید

  8. #8
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط skflower مشاهده تاپیک
    سلام دوست عزیز
    من با این مسئله زیاد مواجه بودم
    کلا اینکه تمام بار رو بندازی به دوش sql کار اشتباهیه
    بخصوص اینکه دستور like بسیار بسیار کند عمل میکنه
    ابتدا دیتابیس رو در یه DataTable فراخوانی کن. بعد دیتاتیبل رو فیلتر کن
    برای مثال:
    DataTable DT; //اینجا جدول رو از دیتابیس بخونید

    if (Search_Edit.Text.Length > 0)
    {
    string Filter = "";
    Filter += " (FName Like '%" + Search_Edit.Text.Replace(" ", "%' and FName Like '%") + "%') ";
    Filter += " or ";
    Filter += " (LName Like '%" + Search_Edit.Text.Replace(" ", "%' and LName Like '%") + "%') ";
    string Sort = "ID asc";
    DataView DV = new DataView(DT, Filter, Sort, DataViewRowState.CurrentRows);
    DGV.DataSource = DV;
    }
    else
    {
    string Sort = "ID asc";
    DataView DV = new DataView(DT);
    DGV.DataSource = DV;
    }
    دوست عزیز این روش رو هم تست کردم حدودا 900 مگ از رم اشغال شد سرعت هم توی تایپ خیلی بدتر شد کد های اون بخش رو میدم ی نگاه کنید.
    عکس های ضمیمه عکس های ضمیمه
    • نوع فایل: png 1.png‏ (60.4 کیلوبایت, 59 دیدار)

  9. #9
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    سلام دوست عزیز شما بهتره اول دیتابیست رو بهینه طراحی کنی بعد اگه دیتابیس بهینه هم جوابگو نبود اون موقع بری سراغ ترد، که در این مورد اصلا ترد هیچ کار خاصی نمیکنه فقط از هنگ کردن جلوگیری میکنه نه اینکه سرعت لود رو بیشتر کنه
    حالا درمورد بهینه سازی، اول باید روی ستون هایی که قراره جستجو بر اساسشون انجام بشه index گذاری کنی، ایندکس گذاری رو میتونم با یه مثال ملموس بهت توضیح بدم که چیکار میکنه، یه دیکشنری رو در نظر بگیر که کلمات داخل دیکشنری براساس حرف اول هر کلمه دسته بندی شدن، ایندکس گذاری در دیتابیس هم دقیقا همین کارو میکنه و توی عملیات جستجو خیلی کمک میکنه
    ایندکس
    Nonclustered index

    انجام دادم روی ستون fname کمی بهتر شد ولی عالی نه باز توی تایپ تاخیر داریم به خصوص موقع پاک کردن حرف

    روش میخوام ک تایپ رو بدون مشکل باشه

  10. #10
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    دوستان روشی برای حل این مشکل پیدا نشد؟ اگر کد هر بخشی لازم رو بگید در اختیارتون میذارم یا اگر میخواید anydesk ریموت بشید بگید واقعا 2 روز بدجور درگیر این موضوع شدم و هر راهی به ذهنم اومده یا گفتن بهم تست کردم نشده

  11. #11
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1390
    محل زندگی
    چند قدم اون ور تر
    پست
    1,731

    نقل قول: مشکل delay در تایپ داخل textbox

    سلام
    کد داخل رویداد TextChanged و بویژه کوئری داخل این رویداد رو بنویسید.

  12. #12
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط Mahmoud Zaad مشاهده تاپیک
    سلام
    کد داخل رویداد TextChanged و بویژه کوئری داخل این رویداد رو بنویسید.
    شات ضمیمه شده کد اصلی که استفاده کردم ، کد کامل event textchaned، خدمت شما

     var query = $"SELECT * FROM Table_User_old where fname like '%{textBox1.Text}%' ORDER BY id OFFSET 0 ROWS FETCH NEXT 200 ROWS ONLY";

    adp = new SqlDataAdapter(query, ClassDbSql.Connection);
    _dt = new DataTable();
    adp.Fill(_dt);
    dataGridView1.DataSource = _dt;


    این کد فوق هم طبق این رفرنس (لینک) یک دوست پیشنهاد دادبهتر شد ولی باز تاخیر در هنگام تایپ مشخص

    در یک گیف کوتاه مشکل اصلی رو نشان دادم که با استفاده از همین تیکه کد بالا نوشتم این از همه کمی بهتر کرد روند تایپ رو ولی بازم تاخیر هست.

    لینک کلیپ (http://s3.picofile.com/file/83633471...2_115.mp4.html)
    عکس های ضمیمه عکس های ضمیمه

  13. #13
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1390
    محل زندگی
    چند قدم اون ور تر
    پست
    1,731

    نقل قول: مشکل delay در تایپ داخل textbox

    اگر فرض کنیم در هر صفحه n رکورد می خواهیم نمایش بدیم در ابتدا باید همون n رکورد رو سلکت کنیم بنابراین از دستور top در textChanged استفاده کنید مثلا select top 100 * from ....
    قاعدتا باید سرعت در این حالت خوب باشه. البته برای count هم راه حلی هست که هر دو کوئری در یک کانکشن انجام بشه. فعلا اینو تست کنید.

  14. #14

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط mrhunter مشاهده تاپیک
    شات ضمیمه شده کد اصلی که استفاده کردم ، کد کامل event textchaned، خدمت شما

    لینک کلیپ (http://s3.picofile.com/file/83633471...2_115.mp4.html)
    دوست عزیز شما انگار هنوز هم مفهوم صفحه بندی رو درک نکردی، توی این کد شما داری همه رکوردهارو واکشی میکنی!!!! اگه توی صفحه بندی مشکلی داری بگو

  15. #15
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط Mahmoud Zaad مشاهده تاپیک
    اگر فرض کنیم در هر صفحه n رکورد می خواهیم نمایش بدیم در ابتدا باید همون n رکورد رو سلکت کنیم بنابراین از دستور top در textChanged استفاده کنید مثلا select top 100 * from ....
    قاعدتا باید سرعت در این حالت خوب باشه. البته برای count هم راه حلی هست که هر دو کوئری در یک کانکشن انجام بشه. فعلا اینو تست کنید.
    http://s4.picofile.com/file/83633502...8_861.mp4.html

    اینم روش شما ولی باز هم دقت کنید کلمه hope اوکی کلمه بعدی نه

    count هم غیر فعال کردم هرچند بررس کرده بودم تاثیر روی سرعت نداشت

  16. #16
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    دوست عزیز شما انگار هنوز هم مفهوم صفحه بندی رو درک نکردی، توی این کد شما داری همه رکوردهارو واکشی میکنی!!!! اگه توی صفحه بندی مشکلی داری بگو
    توی این کد من کل اطلاعات رو کشیدم بیرون و در بخش fill اونو محدود کردم.. اگر منظورم از صفحه بندی top هست یا همان لینکی ک با آفست انجام میده رو میفرمایید اونم زدم نشد در پست فوق لینک زدم... باز اگر جایی من در صفحه بندی اشتباه میکنم لطفا بگید. ممنون میشم ، باز شاید من کد رو درست نشان نمیدم امکان ریموت دارید ؟

  17. #17

    نقل قول: مشکل delay در تایپ داخل textbox

    دوست عزیز این روش رو هم تست کردم حدودا 900 مگ از رم اشغال شد سرعت هم توی تایپ خیلی بدتر شد کد های اون بخش رو میدم ی نگاه کنید.


    ببینین شما بعد از تایپ بیای از sql واکشی کنی اشتباه محض هست. در هر صورت وقتی رکوردها تعدادشون بالا رفت سرعت به شدت کم میشه
    شما ابتدا که برنامه لود میشه همه ی اطلاعات رو لود میکنین و نمایش میدهید
    حالا اطلاعات موجود هست باید از همونا استفاده کنید/ کافیه اطلاعات گرید رو فیلتر کنید
    یه چیزی مثل این
    private void ChercheStextBox_TextChanged(object sender, EventArgs e)    {
    var bd = (BindingSource)dataGridView3.DataSource;
    var dt = (DataTable)bd.DataSource;
    dt.DefaultView.RowFilter = string.Format("LibService like '%{0}%'", ChercheStextBox.Text.Trim().Replace("'", "''"));
    dataGridView3.Refresh();




    }

  18. #18

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط mrhunter مشاهده تاپیک
    توی این کد من کل اطلاعات رو کشیدم بیرون و در بخش fill اونو محدود کردم.. اگر منظورم از صفحه بندی top هست یا همان لینکی ک با آفست انجام میده رو میفرمایید اونم زدم نشد در پست فوق لینک زدم... باز اگر جایی من در صفحه بندی اشتباه میکنم لطفا بگید. ممنون میشم ، باز شاید من کد رو درست نشان نمیدم امکان ریموت دارید ؟
    همین دیگه، شما مفهوم صفحه بندی رو متوجه نشدی، ما صفحه بندی میکنیم که از طرف sql فقط رکوردهای محدودی رو واکشی کنیم نه اینکه همه رو واکشی کنیم حالا بیایم سمت برنامه توی datatable اونهارو محدود کنیم
    بله همون offset و fetch رو باید توی کوئری اصلی استفاده کنین نه توی متد fill

  19. #19
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط hamid_hr مشاهده تاپیک
    ببینین شما بعد از تایپ بیای از sql واکشی کنی اشتباه محض هست. در هر صورت وقتی رکوردها تعدادشون بالا رفت سرعت به شدت کم میشه
    شما ابتدا که برنامه لود میشه همه ی اطلاعات رو لود میکنین و نمایش میدهید
    حالا اطلاعات موجود هست باید از همونا استفاده کنید/ کافیه اطلاعات گرید رو فیلتر کنید
    یه چیزی مثل این
    private void ChercheStextBox_TextChanged(object sender, EventArgs e)    {
    var bd = (BindingSource)dataGridView3.DataSource;
    var dt = (DataTable)bd.DataSource;
    dt.DefaultView.RowFilter = string.Format("LibService like '%{0}%'", ChercheStextBox.Text.Trim().Replace("'", "''"));
    dataGridView3.Refresh();




    }
    دوست عزیز اول اینکه 1 میلیون رکورد رو وقتی واکشی کنیم در رخ داد فرم لود به شدت زمان بر هست حدودا 7-8 ثانیه

    به خاطر همین هم حتی در هنگام لود هم بنده 100 تا رکورد رو لود میکنم و با صفحه بندی اینارو جلو میبرم و چون 100 تا رکورد اومده این دستور فیلتر کردن روی دیتاگرید جواب نمیده تستش کردم قبلا چون فقط بین اون تعداد رکورد لود شده میاد و جستجو انجام میده

  20. #20
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    همین دیگه، شما مفهوم صفحه بندی رو متوجه نشدی، ما صفحه بندی میکنیم که از طرف sql فقط رکوردهای محدودی رو واکشی کنیم نه اینکه همه رو واکشی کنیم حالا بیایم سمت برنامه توی datatable اونهارو محدود کنیم
    بله همون offset و fetch رو باید توی کوئری اصلی استفاده کنین نه توی متد fill
    دوست عزیز پست شماره 15 یکی از دوستان گفتن ک با top انجام بده دقیقا همان گفته شما ... و بنده هم کد رو انجام دادم فیلمش هم فرستادم کلیپ رو نگاه کنید تا متوجه بشید هم کد و هم مشکل رو ممنون میشم

  21. #21

    نقل قول: مشکل delay در تایپ داخل textbox

    علاوه بر راهنمایی دوستان شما چ اصراری دارید که در TextChange بنویسید
    اگر تعداد رکوردهاتون زیاده از Keydown و مثلاً بعد از زدن دکمه Enter این کار رو استفاده کنید
    در ضمن چرا در این رویداد مدام datatable و adapter رو New میکنید؟ خب خارج از رویداد قرارش بدید و فقط مقدار دهیش کنید
    مهندس سیروان اگه سورس خوبی در رابطه با صفحه بندی دارید ممنون میشم قرار بدید هر چی گرفتم همه اول میومدن اطلاعات رو لود میکردن....

  22. #22

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط mrhunter مشاهده تاپیک
    دوست عزیز پست شماره 15 یکی از دوستان گفتن ک با top انجام بده دقیقا همان گفته شما ... و بنده هم کد رو انجام دادم فیلمش هم فرستادم کلیپ رو نگاه کنید تا متوجه بشید هم کد و هم مشکل رو ممنون میشم
    من با top صفحه بندی انجام ندادم نمیدونم رکوردهای بعدی یا قبلی چجوری واکشی میشن، کلیپ رو دیدم نظری ندارم که چرا اینجوری عمل میکنه، میخوای offset و fetch هم تست کن ببین با اونا چجوریه

  23. #23

    نقل قول: مشکل delay در تایپ داخل textbox

    دوست عزیز تاپیک شماره 15 یکی از دوستان گفتن ک با top انجام بده دقیقا همان گفته شما ... و بنده هم کد رو انجام دادم فیلمش هم فرستادم کلیپ رو نگاه کنید تا متوجه بشید هم کد و هم مشکل رو ممنون میشم
    خب شما بیاین ابتدا تست کنین کوئری توی sql server manager چقدر زمان میبره اجرا بشه
    اگر اجرای کوئری باعث کندی هست باید از امکان full text search در دیتابیس استفاده کنین
    اگر نه دنبال علت کندی باشید
    یه چیز دیگه پروزه رو در حالت Relase خروجی بگیرید و به مسیر خروجی برید و اجرا کنید ببینید باز هم کند هست؟

  24. #24
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط Shadow_net مشاهده تاپیک
    علاوه بر راهنمایی دوستان شما چ اصراری دارید که در TextChange بنویسید
    اگر تعداد رکوردهاتون زیاده از Keydown و مثلاً بعد از زدن دکمه Enter این کار رو استفاده کنید
    در ضمن چرا در این رویداد مدام datatable و adapter رو New میکنید؟ خب خارج از رویداد قرارش بدید و فقط مقدار دهیش کنید
    مهندس سیروان اگه سورس خوبی در رابطه با صفحه بندی دارید ممنون میشم قرار بدید هر چی گرفتم همه اول میومدن اطلاعات رو لود میکردن....
    خب تکست چینج راحت ترین حالتش و کاربر راحت تر تایپ میکنه و نتیجه رو میبینه بهرحال روش keydown هم خوبه ولی کاربر شاید ندونه باید enter بزنه و فک کنه برنامه کار نمیکنه، اونجا حتما ی واترمارک باید بزنم که متوجه بشه درسته؟ یا که button جستجو بزنیم به این روش ها فکر کرده بودم قبلا.

    متوجه بحث new کردن شما نشدم خب اصولا همیشه یادگرفتم این مدلی بزنم بالا تعریف میکنیم هرجا لازم بود new میکنیم ، مشکلش چیه دقیقا؟


    درمورد صفحه بندی منم اموزش هارو دیدم ک واکشی رو اول توی فرم لود انجام میدن بعد با دکمه ها فیلتر میکنن ببینید شما توی همان فرم لود مثلا با دستور top یا هر دستور دگ ک راحتی ... موقع لود فرم هم مقدار محدودی مثلا 100 رکورد رو بیار

  25. #25
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    من با top صفحه بندی انجام ندادم نمیدونم رکوردهای بعدی یا قبلی چجوری واکشی میشن، کلیپ رو دیدم نظری ندارم که چرا اینجوری عمل میکنه، میخوای offset و fetch هم تست کن ببین با اونا چجوریه
    خب 100 درصد شما هم برنامه هایی ساختی که تعداد رکورد های خیلی بالا داشته و باید این موارد صفحه بندی و فیلتر کردن رو هندل میکردید ممنون میشم در اون مورد ها راهنمایی بفرمایید


    SELECT * FROM table
    ORDER BY columnName
    OFFSET #StartRow ROWS FETCH NEXT #numberOfRowInPaging ROWS ONLY


    توی پست 12 هم رفرنس این دستور افیس و فچ رو قرار دادم و نوشتم ک استفاده کردم باز تاثیر چندانی نداشت

  26. #26

    نقل قول: مشکل delay در تایپ داخل textbox

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

  27. #27
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط hamid_hr مشاهده تاپیک
    خب شما بیاین ابتدا تست کنین کوئری توی sql server manager چقدر زمان میبره اجرا بشه
    اگر اجرای کوئری باعث کندی هست باید از امکان full text search در دیتابیس استفاده کنین
    اگر نه دنبال علت کندی باشید
    یه چیز دیگه پروزه رو در حالت Relase خروجی بگیرید و به مسیر خروجی برید و اجرا کنید ببینید باز هم کند هست؟
    در sql تست کردم دستور

    select * from Table_User_old


    حدودا 10 ثانیه میبره زمان بعدش با دستور top هم ک کسری از ثانیه هست برای 100 رکورد ...

    مورد full text search رو میشه منبع بدید نمیدونم چیه و چطوری انجام میشه

    در حالت رلیز هم خیر تفاوت نیست

  28. #28

    نقل قول: مشکل delay در تایپ داخل textbox

    در sql تست کردم دستور


    1
    select * from Table_User_old




    حدودا 10 ثانیه میبره زمان بعدش با دستور top هم ک کسری از ثانیه هست برای 100 رکورد ...


    مورد full text search رو میشه منبع بدید نمیدونم چیه و چطوری انجام میشه


    در حالت رلیز هم خیر تفاوت نیست
    منظورم با like تست کنید ببینید چی میشه
    برا full text search ایتدا باید زمان نصب تیکش رو بزنید تا سرویسش نصب بشه بعد این لینک توضیح داده بقیشو
    https://docs.microsoft.com/en-us/sql...ql-server-2017

    یه نکته دیگه سعی کنید از select * اصلا استفاده نکنید و اسم ستون ها رو قید کنید

  29. #29
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    دوست عزیز بنده چیزی رو از رو هوا نمیگم حتما قبلش انجام دادم همین الان هم دارم انجام میدم و نتیجه گرفتم، شما لطفی بکن و دیتابیس و برنامه ت رو بذار تا ببینیم مشکل چیه، برای اینکه حجم دیتابیستون هم زیاده شما میتونی یه اسکریپت از داده ها تهیه کنی و اسکریپت رو اینجا بذاری و نیازی نیست که بانک رو بذاری، البته بکاپ هم میشه تهیه کرد اگر حجم بکاپ زیاد نیست میتونی فایل بکاپ رو بذاری
    والا مهندس بنده هم نخواستم جسارت کنم گفتم روشی رو که استفاده میکنید بگید روش صفحه بندی ... بانک اطلاعاتی بکاپ زدم شد 600 مگ اسکریپت هم زدم ک هم schema va data باشه ک هم ساختار و دیتارو باهم بیاره فایلش شد 300 مگ

    اگر مشکلی نیست من بدون دیتاش رو بفرستم با برنامه SQL Data Generator 4
    رکورد هارو تزریق کنید خیلی ساده و سریع

    موافق هستید تا سورس رو اپلود کنم؟

  30. #30
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط hamid_hr مشاهده تاپیک
    منظورم با like تست کنید ببینید چی میشه
    برا full text search ایتدا باید زمان نصب تیکش رو بزنید تا سرویسش نصب بشه بعد این لینک توضیح داده بقیشو
    https://docs.microsoft.com/en-us/sql...ql-server-2017

    یه نکته دیگه سعی کنید از select * اصلا استفاده نکنید و اسم ستون ها رو قید کنید
    با دستور لایک یا هر حالتی که نزدیک به این مورد تاثیری نداره دوست عزیز

    لینک رو نگاه کردم اینم مثل همون بحث ایندکس که یکی از دوستان اشاره کرده بودن اینم مثل همان بعید میدونم تاثیر داشته باشه

    با استار یا اسم مگر فرقی ایجاد میکنه وقتی من به کل جداول نیاز دارم

  31. #31

    نقل قول: مشکل delay در تایپ داخل textbox

    با دستور لایک یا هر حالتی که نزدیک به این مورد تاثیری نداره دوست عزیز
    یعنی با سرعت قابل قبولی اجرا میشه؟
    اگر بله خب مشکل سمت دیتابیس نیست و باید تریس کنید و ببینید کدوم خط بیشترین زمانو میگیره و حلش کنید
    لینک رو نگاه کردم اینم مثل همون بحث ایندکس که یکی از دوستان اشاره کرده بودن اینم مثل همان بعید میدونم تاثیر داشته باشه
    مورد full text search ّرای زمانی هست که شما در دیتابیس از عملگر like خیلی استفاده میکنید. در این صورت دیگه ایندکس ها کارایی ندارند و این یک روش هست برای سرعت بخشیدن به کوئری ها. برای داده کاوی هم ازش استفاده میشه
    با استار یا اسم مگر فرقی ایجاد میکنه وقتی من به کل جداول نیاز دارم
    اره فرق زیاد داره ولی یک دلیلش میتونه این باشه که اگر چند وقت دیکه شما یک ستون به جدولتون اضافه کردید دیگه نیاز نباشه همهی کد ها رو هم تغییر بدید

  32. #32
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

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

    مورد full text search ّرای زمانی هست که شما در دیتابیس از عملگر like خیلی استفاده میکنید. در این صورت دیگه ایندکس ها کارایی ندارند و این یک روش هست برای سرعت بخشیدن به کوئری ها. برای داده کاوی هم ازش استفاده میشه

    اره فرق زیاد داره ولی یک دلیلش میتونه این باشه که اگر چند وقت دیکه شما یک ستون به جدولتون اضافه کردید دیگه نیاز نباشه همهی کد ها رو هم تغییر بدید

    بعله با زمان نرمالی اجرا میشه اگر فقط سلکت باشه برای 1 میلیون حدودا 7-8 ثانیه ک طبیعی اگرم با like باشه کسری از ثانیه

    تریس هم کردم در رویداد تکست چینج با f10 سریع دستورات میره جلو میشکلی نیست

    ببینید سمت راست تصویر ضمیمه شده رو

    از نظر بنده مشکل در تعداد اجرا مکرر دستور هست چون هر حرف تایپ میشه ی بار این رخ داد اجرا میشه و فک کنم اینجاس sql کم میاره یا سمت برنامه دیتا گرید نمیدونم....

    جالب اینجاس چند حرف اول مثلا کلمه hope توی عکس مشکلی نیست از اونجا به بعد فک کنم دگ فشار میاد به sql
    عکس های ضمیمه عکس های ضمیمه

  33. #33
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    ایده ای به ذهنم رسیده ولی توی پیاده سازی مشکل دارم گفتم مثلا این بخش رو جوری بزنیم در رویداد keydown اگر کاربر حدودا 1 ثانیه دکمه ای رو فشار نداد به اصطلاح یعنی اینکه تایپ کردنش تمام شده و آن زمان بریم و دستورات پایگاه داده رو بزنیم

    اگر کسی بتونه کد اینو برام بنویسه ممنون میشم فک میکنم این روش جالبی باشه حالا اگر ایرادی دارم دیگه نمیدونم

  34. #34

    نقل قول: مشکل delay در تایپ داخل textbox

    یه تایمر بزار با مثلا 2 ثانیه و غیر فعالش کن
    تو رویداد keydown چک کن اگه غیر فعال بود اونو فعال و اگه فعال بود ریستش کن
    اگه رویداد مربوط به تایمر اجرا شد تایمر رو غیر فعال کن

  35. #35
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    دوستان این سورس برنامه و بکاپ دیتابیس، البته دیتابیس به خاطر کاهش حجم خروجی رو توی حالت export data tire-application... گرفتم در فایل زیپ که قرار دادم فایلی به فرمت bacpac هست در sql management روی دیتابیس کلیک راست import data tier-... هست گزینه اش...

    فرم5 رو تست های خودتان رو انجام بدید یا در یک فرم جدید هر حالتی که دوست دارید تست کنید

    چیزی که بنده احتیاج دارم در این حال که صفحه بندی داره دیتا گرید ... لود اولیه فرم هم پایین و تکست باکس روان تایپ کنه.

    .. در فرم 6 هم همان روش با دیتاست تست کردم بجای دیتاتیبل هرچند میدونم datatable سریعتر گفتم شاید تفاوت باشه...

    فرم 2 هم یک دوست زحمت کشیده بود با ترید انجام داده بود ولی ترید در حین تایپ سریع به مشکل میخوره میتونید تست کنید.


    دانلود سورس

  36. #36

    نقل قول: مشکل delay در تایپ داخل textbox

    بابت جستجو روشی که من پیاده کردم از keyDown استفاده کردم در کادر متن وققتی مقدار داد و اینتر زد اطلاعات بیاره از دیتابیس ولی در روش یک میلیون اطلاعات امدم اطلاعات گرفتم داخل دیتاتیبل و و بعد از اینکه داخل دیتاتیبل گرفتم از دیتاتیبل جستجو میکنم تازه باز جستجو به روش KeyDown قرار میدم که روش خیلی خوبی هستش و فشاری روی دیتابیس نیست.
    به این روش اطلاعات میگیرم و داخل DataTable میریزم و جتستو و آخر سر خواست تعداد رکورد یا کلش خروجی اکسل میگیرم تو یک ثانیه
    private DataTable paggedtable;
    private DataTable dt33;
    private DataTable dtExcel;
    private BindingSource bs = new BindingSource();
    private clsProgress progress = new clsProgress();
    private sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr sabtMotovafy = new sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr();
    public DataTable refDt()
    {
    DataTable dtCustomers;
    string constr = @"Data Source=" + Properties.Settings.Default.IP + ";Initial Catalog='" +
    Program.DbDatabase + "';User ID='" + Program.Username + "';Password='" + Program.Password +
    "'";
    using (SqlConnection con = new SqlConnection(constr))
    {
    using (SqlCommand cmd = new SqlCommand(ProcedureName))
    {
    cmd.Parameters.Add(new SqlParameter(at + StatementType,
    P_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.Select_In fo_Motvfa));
    cmd.Parameters.Add(new SqlParameter(at + P_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Mahlsa btEtelat,
    Program.A_ID));
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Connection = con;
    cmd.CommandTimeout = 0;
    con.Open();
    using (SqlDataReader sdr = cmd.ExecuteReader())
    {
    dtCustomers = new DataTable();
    dtCustomers.Load(sdr);
    //dtCustomers.Columns[0].ColumnName = "شماره_پرونده";
    //dtCustomers.Columns[1].ColumnName = "کد_رایانه_ای";
    //dtCustomers.Columns[2].ColumnName = "تاریخ_تنظیم_سند";
    //dtCustomers.Columns[3].ColumnName = "ملیت";
    //dtCustomers.Columns[4].ColumnName = "کد_ملی";
    //dtCustomers.Columns[5].ColumnName = "وضعیت_قبر";
    //dtCustomers.Columns[6].ColumnName = "شماره_شناسنامه";
    //dtCustomers.Columns[7].ColumnName = "جنسیت";
    //dtCustomers.Columns[8].ColumnName = "نام_و_نام_خانوادگی";
    //dtCustomers.Columns[9].ColumnName = "نام_پدر";
    //dtCustomers.Columns[10].ColumnName = "محل_صدور";
    //dtCustomers.Columns[11].ColumnName = "تلفن";
    //dtCustomers.Columns[12].ColumnName = "موبایل";
    //dtCustomers.Columns[13].ColumnName = "نام_تحویل_گیرنده";
    //dtCustomers.Columns[14].ColumnName = "نسبت_متوفی";
    //dtCustomers.Columns[15].ColumnName = "مشخصات_پرداخت_کننده";
    //dtCustomers.Columns[16].ColumnName = "شماره_پرداخت_کننده";
    //dtCustomers.Columns[17].ColumnName = "تاریخ_تولد";
    //dtCustomers.Columns[18].ColumnName = "تاریخ_وفات";
    //dtCustomers.Columns[19].ColumnName = "سن";
    //dtCustomers.Columns[20].ColumnName = "بلوغ";
    //dtCustomers.Columns[21].ColumnName = "وضعیت_متوفی";
    //dtCustomers.Columns[22].ColumnName = "از";
    //dtCustomers.Columns[23].ColumnName = "محل دفن";
    //dtCustomers.Columns[24].ColumnName = "فاز";
    //dtCustomers.Columns[25].ColumnName = "نام_قطعه";
    //dtCustomers.Columns[26].ColumnName = "قطعه";
    //dtCustomers.Columns[27].ColumnName = "ردیف";
    //dtCustomers.Columns[28].ColumnName = "شماره";
    //dtCustomers.Columns[29].ColumnName = "طبقه";
    //dtCustomers.Columns[30].ColumnName = "توضیح_یا_رزرو";
    //dtCustomers.Columns[31].ColumnName = "شماره_گواهی_فوت";
    //dtCustomers.Columns[32].ColumnName = "علت_فوت";
    //dtCustomers.Columns[33].ColumnName = "استان_محل_زندگی";
    //dtCustomers.Columns[34].ColumnName = "شهرستان_محل_زندگی";
    //dtCustomers.Columns[35].ColumnName = "آدرس_محل_سکونت";
    //dtCustomers.Columns[36].ColumnName = "بوی_یا_غیر_بومی";
    //dtCustomers.Columns[37].ColumnName = "محل_وقوع_فوت";
    //dtCustomers.Columns[38].ColumnName = "استان_محل_فوت";
    //dtCustomers.Columns[39].ColumnName = "شهرستان_محل_فوت";
    //dtCustomers.Columns[40].ColumnName = "وضعیت_سند";
    //dtCustomers.Columns[41].ColumnName = "نحوه_پرداخت_پیش_فروش";
    //dtCustomers.Columns[42].ColumnName = "توضیح";
    //dtCustomers.Columns[43].ColumnName = "گواهی_متصدی";
    //dtCustomers.Columns[44].ColumnName = "سنگ";
    //dtCustomers.Columns[45].ColumnName = "گواهی_به_ادارات";
    //dtCustomers.Columns[46].ColumnName = "سرد_خانه";
    //dtCustomers.Columns[47].ColumnName = "نایلون";
    //dtCustomers.Columns[48].ColumnName = "کاور";
    //dtCustomers.Columns[49].ColumnName = "نماسازی";
    //dtCustomers.Columns[50].ColumnName = "جمع_آوری_و_یا_زد_عفونی";
    //dtCustomers.Columns[51].ColumnName = "تشکیل_پرونده";
    //dtCustomers.Columns[52].ColumnName = "خدمات_باز_کردن_قبر_آماده" ;
    //dtCustomers.Columns[53].ColumnName = "گواهی_ثبت_احوال";
    //dtCustomers.Columns[54].ColumnName = "صدور_گواهی_دفن";
    //dtCustomers.Columns[55].ColumnName = "صدور_سند_حق_انتقال_از_قبر ";
    //dtCustomers.Columns[56].ColumnName = "عنوان_سایر_اول";
    //dtCustomers.Columns[57].ColumnName = "مبلغ_سایر_اول";
    //dtCustomers.Columns[58].ColumnName = "عنوان_سایر_دوم";
    //dtCustomers.Columns[59].ColumnName = "مبلغ_سایر_دوم";
    //dtCustomers.Columns[60].ColumnName = "بسته_فرهنگی";
    //dtCustomers.Columns[61].ColumnName = "نام_مداح";
    //dtCustomers.Columns[62].ColumnName = "هزینه_مداح";
    //dtCustomers.Columns[63].ColumnName = "هزینه_کل";
    //dtCustomers.Columns[64].ColumnName = "درصد_مالیات";
    //dtCustomers.Columns[65].ColumnName = "مبلغ_مالیات";
    //dtCustomers.Columns[66].ColumnName = "دفن";
    //dtCustomers.Columns[67].ColumnName = "پیش_فروش";
    //dtCustomers.Columns[68].ColumnName = "راننده_اول";
    //dtCustomers.Columns[69].ColumnName = "راننده_دوم";
    //dtCustomers.Columns[70].ColumnName = "انتقال";
    //dtCustomers.Columns[71].ColumnName = "تشییع";
    //dtCustomers.Columns[72].ColumnName = "توقف";
    //dtCustomers.Columns[73].ColumnName = "جمع_کل";
    //dtCustomers.Columns[74].ColumnName = "مبلغ_تخفیف";
    //dtCustomers.Columns[75].ColumnName = "مبلغ_پرداختی";
    //dtCustomers.Columns[76].ColumnName = "نحوه_پرداخت";
    //dtCustomers.Columns[77].ColumnName = "مبلغ_پرداختی_نقد";
    //dtCustomers.Columns[78].ColumnName = "مبلغ_پرداختی_کارت_خوان";
    //dtCustomers.Columns[79].ColumnName = "مانده";
    //dtCustomers.Columns[80].ColumnName = "وضعیت_حساب_کتاب";
    //dtCustomers.Columns[81].ColumnName = "نام_کاربر_ثبت_کننده";
    //dtCustomers.Columns[82].ColumnName = "تاریخ_ثبت";
    //dtCustomers.Columns[83].ColumnName = "زمان_ثبت";
    //dtCustomers.Columns[84].ColumnName = "تاریخ_ویرایش";
    //dtCustomers.Columns[85].ColumnName = "زمان_ویرایش";
    //dtCustomers.Columns[86].ColumnName = "تعداد_دفعات_ویرایش";
    }

    con.Close();
    }
    }

    return dtCustomers;

    }

    private void FocuseMoveControl(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.Enter)
    {
    try
    {
    string filter = string.Format(
    "CONVERT(" + dgv1.Columns[0].DataPropertyName + ", System.String) like '%" +
    Txt_GVD_Date_Sabt_Sanad.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[1].DataPropertyName + ", System.String) like '%" +
    Txt_SM_NameAndLast.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[2].DataPropertyName + ", System.String) like '%" +
    Txt_GVD_Shomare_Parvande.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[4].DataPropertyName + ", System.String) like '%" +
    Txt_SM_SHS_ShomareSanad.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[7].DataPropertyName + ", System.String) like '%" +
    Txt_SM_CM_Code_Mali.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[8].DataPropertyName + ", System.String) like '%" +
    Txt_SM_Shomare_Shenasname.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[9].DataPropertyName + ", System.String) like '%" +
    Txt_CTS_Sex.Text.Trim() + "%' AND " +

    "CONVERT(" + dgv1.Columns[10].DataPropertyName + ", System.String) like '%" +
    Txt_SM_Father.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[11].DataPropertyName + ", System.String) like '%" +
    Txt_SM_Mahal_Sodor.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[18].DataPropertyName + ", System.String) like '%" +
    Txt_SM_Born.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[19].DataPropertyName + ", System.String) like '%" +
    Txt_SM_Death.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[21].DataPropertyName + ", System.String) like '%" +
    Txt_B_Bolog.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[22].DataPropertyName + ", System.String) like '%" +
    Txt_RT_Title.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[25].DataPropertyName + ", System.String) like '%" +
    Txt_SM_Faz.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[26].DataPropertyName + ", System.String) like '%" +
    Txt_NG_NameGete.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[27].DataPropertyName + ", System.String) like '%" +
    Txt_SM_Gete.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[28].DataPropertyName + ", System.String) like '%" +
    Txt_SM_Radif.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[29].DataPropertyName + ", System.String) like '%" +
    Txt_SM_Shomare.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[30].DataPropertyName + ", System.String) like '%" +
    Txt_SM_Tabage.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[33].DataPropertyName + ", System.String) like '%" +
    Txt_EPH_EletePhoto.Text.Trim() + "%' and " +

    "CONVERT(" + dgv1.Columns[37].DataPropertyName + ", System.String) like '%" +
    Txt_SM_Bome_Ger_Bome.Text.Trim() + "%' "
    );

    bs.Filter = filter;
    // bs.Filter = string.Format(dataGridView1.Columns[0].DataPropertyName + " like '%" + Txt_Shomare_Sanad.Text+ "%' and " + dataGridView1.Columns[8].DataPropertyName + " like '%" + Txt_Name_LastName.Text+ "%' and " + dataGridView1.Columns[11].DataPropertyName + " like '%" + Txt_From.Text+ "%'");
    dgv1.DataSource = bs;

    MessageBox.Show("تعداد رکورد های یافت شده " + Convert.ToDecimal(dgv1.Rows.Count).ToString("N0") +
    " تا میباشد.");
    SendKeys.Send("{TAB}");
    e.Handled = true;
    e.SuppressKeyPress = true;
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }

    }
    }

    private void Frm_Full_Search_Gabz_Vosual_Load(object sender, EventArgs e)
    {
    //progress.startProgress();
    dt33 = refDt();
    bs.DataSource = dt33;
    dgv1.DataSource = bs;
    dgv1.AllowUserToOrderColumns = true;
    SetDisplayOrder();
    //progress.stopProgress();
    MessageBox.Show(
    "تعداد رکورد های یافت شده " + Convert.ToDecimal(dt33.Rows.Count).ToString("N0") + " میباشد.");
    }

    private void Exporta(DataTable dtexpo)
    {
    SaveFileDialog dialog = new SaveFileDialog
    {
    InitialDirectory = "c:/Documents",
    Title = "Select Where To Save File",
    Filter = "Excel Files (*.xls;*.xlsx)|*.xls;*.xlsx|All files (*.*)|*.*"
    };
    if (dialog.ShowDialog() == DialogResult.OK)
    {
    StreamWriter wr = new StreamWriter(dialog.FileName, false, Encoding.Unicode);

    for (int i = 0; i < dtexpo.Columns.Count; i++)
    {
    wr.Write(dtexpo.Columns[i].ToString().ToUpper() + "\t");
    }

    wr.WriteLine();

    for (int i = 0; i < (dtexpo.Rows.Count); i++)
    {
    for (int j = 0; j < dtexpo.Columns.Count; j++)
    {
    if (dtexpo.Rows[i][j] != null)
    {
    wr.Write(Convert.ToString(dtexpo.Rows[i][j]) + "\t");
    }
    else
    {
    wr.Write("\t");
    }
    }

    wr.WriteLine();
    }

    wr.Close();
    MessageBox.Show("خروجی اکسل با موفقعیت انجام شد. ");
    }


    }

    private DataTable DGV2DT(DataGridView dgv)
    {
    DataTable dtgv = new DataTable();
    foreach (DataGridViewColumn col in dgv.Columns)
    {
    dtgv.Columns.Add(col.Name);
    }

    foreach (DataGridViewRow row in dgv.Rows)
    {
    DataRow dRow = dtgv.NewRow();
    foreach (DataGridViewCell cell in row.Cells)
    {
    dRow[cell.ColumnIndex] = cell.Value;
    }

    dtgv.Rows.Add(dRow);
    }

    return dtgv;
    }

    private void خروجیاکسلToolStripMenuItem_Click(object sender, EventArgs e)
    {
    DataTable BDT = DGV2DT(dgv1);
    Exporta(BDT);
    }


    private void dgv1_DoubleClick(object sender, EventArgs e)
    {
    try
    {
    Frm_Gabz_Vosual_Daramad fm = new Frm_Gabz_Vosual_Daramad();
    fm.TxtShomareSand.Text = dgv1.SelectedRows[0].Cells[4].Value.ToString();
    fm.Txt_GVD_Shomare_Parvande.Text = dgv1.SelectedRows[0].Cells[2].Value.ToString();
    fm.Txt_SM_CM_Code_Mali.Text = dgv1.SelectedRows[0].Cells[7].Value.ToString();
    fm.Show();
    }
    catch
    {
    }

    }

    private void Frm_Full_Search_Gabz_Vosual_Resize(object sender, EventArgs e)
    {

    }

    private void Frm_Full_Search_Gabz_Vosual_FormClosing(object sender, FormClosingEventArgs e)
    {
    CacheDisplayOrder();
    GC.Collect();
    }

    private void CacheDisplayOrder()
    {
    IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetUserStoreForAssembly();
    using (IsolatedStorageFileStream isoStream = new
    IsolatedStorageFileStream("DisplayCache", FileMode.Create,
    isoFile))
    {
    int[] displayIndices = new int[dgv1.ColumnCount];
    for (int i = 0; i < dgv1.ColumnCount; i++)
    {
    displayIndices[i] = dgv1.Columns[i].DisplayIndex;
    }

    XmlSerializer ser = new XmlSerializer(typeof(int[]));
    ser.Serialize(isoStream, displayIndices);
    }
    }

    private void SetDisplayOrder()
    {
    IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetUserStoreForAssembly();
    string[] fileNames = isoFile.GetFileNames("*");
    bool found = false;
    foreach (string fileName in fileNames)
    {
    if (fileName == "DisplayCache")
    {
    found = true;
    }
    }

    if (!found)
    {
    return;
    }

    using (IsolatedStorageFileStream isoStream = new
    IsolatedStorageFileStream("DisplayCache", FileMode.Open,
    isoFile))
    {
    try
    {
    XmlSerializer ser = new XmlSerializer(typeof(int[]));
    int[] displayIndicies =
    (int[])ser.Deserialize(isoStream);
    for (int i = 0; i < displayIndicies.Length; i++)
    {

    dgv1.Columns[i].DisplayIndex = displayIndicies[i];

    }
    }
    catch
    {
    }
    }
    }

  37. #37
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط davidrobert مشاهده تاپیک
    بابت جستجو روشی که من پیاده کردم از keyDown استفاده کردم در کادر متن وققتی مقدار داد و اینتر زد اطلاعات بیاره از دیتابیس ولی در روش یک میلیون اطلاعات امدم اطلاعات گرفتم داخل دیتاتیبل و و بعد از اینکه داخل دیتاتیبل گرفتم از دیتاتیبل جستجو میکنم تازه باز جستجو به روش KeyDown قرار میدم که روش خیلی خوبی هستش و فشاری روی دیتابیس نیست.
    به این روش اطلاعات میگیرم و داخل DataTable میریزم و جتستو و آخر سر خواست تعداد رکورد یا کلش خروجی اکسل میگیرم تو یک ثانیه
    از شما هم تشکر میکنم دوست عزیز بابت این راهنمایی کد ها رو نگاه کردم کم و بیش متوجه شدم فرایند شما رو هم ، بعله سر آخر با همان روش keydown به یک نتیجه مطلوب فعلا رسیدم.

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

    بازم ممنون از همه دوستان

    و همچنان منتظرم دوستان که این تاپیک رو میبینن سورس کد رو دانلود کنن و بصورت عملی تست کنن و اگر راه حلی پیدا کردن کدش رو بفرستن


    پیشاپیش از دوستانی که همکاری میکنن ممنونم

  38. #38

    نقل قول: مشکل delay در تایپ داخل textbox

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

  39. #39
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1394
    پست
    48

    نقل قول: مشکل delay در تایپ داخل textbox

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    دوست عزیز فایل بکاپت ریستور نمیشه
    ای وای

    امکان داره چون نسخه sql من 2017 هست شاید مال شما پایین تر خطا میده؟!!!!!!!!!!!!!!!!!!!!!!!

    خب فک کنم تنها راه اینکه با همان نرم افزار دیتا جنریتور دیتا بسازید

  40. #40

    نقل قول: مشکل delay در تایپ داخل textbox

    اصول کار رو میگم همونارو تبدیل به کد کن:
    ۱. تعداد رکوردها رو واکشی میکنی، چه در حالت فیلتر کردن چه در حالت بدون فیلتر
    ۲. رکوردها رو توسط کوئری sql و با offset و fetch از سمت دیتابیس واکشی میکنی، نه اینکه کل رکوردهارو از دیتابیس واکشی کنی بعد بیای توی دیتاتیبل صفحه بندی انجام بدی و بازم در حالت فیلتر و بدون فیلتر
    ۳. Totalpage رو براساس تعداد رکوردهای مطابقت دار محاسبه میکنی و لیبل های مربوط به صفحه بندی رو تنظیم میکنی

    مرحله یک و سه رو خودت انجام دادی حالا نمیدونم تا چه حد درست کار میکنن اما مشکل اساسی که داشتی توی مرحله دو بود بازم تاکید میکنم صفحه بندی یعنی تنها رکوردهای موردنیازت رو از دیتابیس واکشی کنی و داخل دیتاگرید فقط اون تعذاد رو نمایش میدی نه اینکه همه رو واکشی کنی و لودشون کنی توی دیتاتیبل و از اونجا مثلا ۱۰۰ تارو برداری و توی دیتاگرید نمایش بدی....
    حتما این مورد رو دقت کن

صفحه 1 از 2 12 آخرآخر

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

  1. پاسخ: 5
    آخرین پست: جمعه 26 تیر 1394, 02:18 صبح
  2. سوال: تایپ در textbox و ظاهر شدن لیستی مانند جستجو در google
    نوشته شده توسط hamedjonjon در بخش C#‎‎
    پاسخ: 5
    آخرین پست: شنبه 24 تیر 1391, 16:51 عصر
  3. نمایش خبر به صورت تایپ حرف به حرف با کمک تابع delay
    نوشته شده توسط sara_aryanfar در بخش jQuery
    پاسخ: 6
    آخرین پست: سه شنبه 01 فروردین 1391, 14:47 عصر
  4. سوال: delay یا sleep در جاوا اسکریپ
    نوشته شده توسط abasfar در بخش JavaScript و Framework های مبتنی بر آن
    پاسخ: 6
    آخرین پست: شنبه 27 اسفند 1390, 20:42 عصر

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

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