PDA

View Full Version : چاره پائین آمدن سرعت برنامه بخاطر fill کردن DataTable



kh1387
شنبه 27 مهر 1387, 15:49 عصر
با سلام
من بخاطر اینکه در رویداد keydown یک textbox چندین جدول رو fill کردم، سرعت پایین اومده، راه چاره چیست؟
مرسی

adinochestva
شنبه 27 مهر 1387, 15:59 عصر
برای چی fill می کنید ؟ برای فیلتر ؟
اگه اینطوره از خوده datatable برای فیلتر استفاده کنید

kh1387
شنبه 27 مهر 1387, 16:25 عصر
برای چی fill می کنید ؟ برای فیلتر ؟
اگه اینطوره از خوده datatable برای فیلتر استفاده کنید



da.fill(dt)

اقاقيا
یک شنبه 28 مهر 1387, 09:04 صبح
سلام
منم همين مشكل رو دارم... و با وجود 300 يا 400 ركورد تقريبا 20 ثانيه اين عمل طول ميكشه..
چي كار بايد بكنم كه اين زمان كوتاه تر بشه؟؟؟

MohammadSoft
یک شنبه 28 مهر 1387, 09:15 صبح
سلام
برای فیلتر کردن از این دستور استفاده کنید :



dt.DefaultView.RowFilter = "Filter Exp";

اقاقيا
یک شنبه 28 مهر 1387, 09:32 صبح
ممكنه يه نمونه برنامه اگه دارين بذاريد...؟؟؟

MohammadSoft
یک شنبه 28 مهر 1387, 13:56 عصر
مثلا اگه شما روی فیلد شماره صورتحساب بخواهید جستجو کنید و بک TextBox برای این کار به اسم txtInvoiceNo دارید ، کد شما به این شکل خواهد بود :


dt.DefaultView.RowFilter = string.Format("FieldName = {0} ",txtInvoiceNo .Text);

kh1387
یک شنبه 28 مهر 1387, 15:02 عصر
با عرض معذرت خدمت دوستان
من منظورم فیلتر نیست، اگه سؤال من رو به دقت بخونید متوجه می شید.
من چند تا DataTable دارم که باید در رویداد keyPress یک جعبه متن اونا رو fill کنم یعنی با دیتا آداپتر اونها رو پر کنم ،
حالا مشکلم اینه که با این کار سرعت برنامه ام میاد پائین ، تازه در بانکم الان رکوردی نیست وای به حال اینکه به 1000000 رکورد برسه.
می خوام ببینم راهی هست که این مشکل برطرف شه؟
ممنونم

MohammadSoft
یک شنبه 28 مهر 1387, 15:36 عصر
دوست عزیز مسئله اینجاست که شما چرا می خواهی با رویداد keyPress جداولت رو پر کنی !!!
این کار به هییییییچ وجه منطقی نیست .
ما به این خاطر فیلتر را پیشنهاد کردیم ، که شما یک بار اطلاعات رو از بانک بیاری و بعد در رویداد keyPress اطلاعات را فیلتر کنی .

kh1387
یک شنبه 28 مهر 1387, 17:00 عصر
دوست عزیز مسئله اینجاست که شما چرا می خواهی با رویداد keyPress جداولت رو پر کنی !!!
این کار به هییییییچ وجه منطقی نیست .
ما به این خاطر فیلتر را پیشنهاد کردیم ، که شما یک بار اطلاعات رو از بانک بیاری و بعد در رویداد keyPress اطلاعات را فیلتر کنی .


ممنونم اما من در رویداد KeyPress باید وقتی کاربر کد رو وارد کرد مشخصاتش بیاد، میشه راهنمایی کنید که چکار کنم؟
همین روش فیلتر رو بیشتر توضیح بدید.
من کلا در قسمتی که فرمم
InitializeComponent عمل رو انجام می ده کانکشن و دیتا آداپتور رو تعریف می کنم و در رویداد KeyPress دیتا تیبلم رو فیل کردن و در آخر clear() می کنم.
لطفا روش درست رو بهم یاد بدید.
ممنونم

MohammadSoft
دوشنبه 29 مهر 1387, 08:54 صبح
ببینید شما برای جستجو می خواهید از محتوای TextBox استفاده کنید ؟
یعنی می خواهید محتوای TextBox رو جستجو کنید ؟
اگه این کار رو می خواهید بکنید باید یک دکمه جستجو داشته باشید ، به این خاطر که عمل Fill عمل زمان بری است و اطلاعات از روی Database خونده میشن و این کار نباید با هر بار فشره شدن کلید انجام بشه ، باید یک دکمه یا .. وجود داشته باشه که کاربر هر زمان که خواست اون رو فشار بده و هزینه اش رو هم بپذیره .
ولی اگه شما مثلا یک گرید تو فرمتون دارید ، می تونید بخشی از اطلاعاتتون رو توی اون نمایش بدید یا نتیجه جستجوتون رو و یک TextBox داشته باشید که اطلاعات گرید رو با توجه به تغییر متن اون تغییر بدید و بر اساس متن TextBox اطلاعات گرید فیلتر بشه ، برای این کار از اون دستوری که گفتم می تونید استفاده کنید .
پس یه بار دیگه تاکید می کنم که شما آوردن اطلاعات از Database رو نباید با رویدادی مثل KeyPress انجام بدید .

kh1387
سه شنبه 30 مهر 1387, 20:39 عصر
نه دوست عزیز
من می خوام وقتی کاربر کدی وارد جعبه متن کرد و اینتر رو فشار داد، اطلاعات روی صفحه بیاد.
حالا واسه اینکار مجبورم در رویداد KeyPress جعبه متنم تمامی جدول هام رو به دیتا تیبل منتقل کنم که اینکار باعث پایین اومدن سرعت می شه .
حالا می خوام ببینم راه حلی برای اینکار وجود دارد؟
در ضمن هنوز تیبل های برنامه ام پر نشده اگه پر بشه فکر می کنم کاربر باید یه ربعی منتظر بشینه تا جواب بگیره!!!