PDA

View Full Version : فیلتر کردن DataGridView که Bind نشده



AmirAlimadadi
سه شنبه 21 مهر 1388, 12:49 عصر
با سلام
من یه گرید ویو دارم که به هیچ جا Bind نیست، یعنی یه سری داده خوندم و ریختم توش، حالا می خوام روی یکی از ستونهای اون عملیات فیلترینگ رو انجام بدم، با استفاده از یه حلفه، تمام سطرها رو خوندم و عملیات فیلتر رو دستی انجام دادم، اما اگر تعداد سطرها زیاد باشه، حلقه خیلی طولانی می شه که من نمی خوام این اتفاق بیفته. کسی نمی دونه چه طور می شه این کار رو سریع انجام داد.
اینم بگم که من توی سایت جستجو کردم، اما در مورد گرید ویویی که Bind نشده باشه چیزی پیدا نکردم

Arash_janusV3
سه شنبه 21 مهر 1388, 13:00 عصر
سلام
من فکر کنم گرید janus کارت را راحت تر می کنه

اَرژنگ
سه شنبه 21 مهر 1388, 13:41 عصر
با سلام
من یه گرید ویو دارم که به هیچ جا Bind نیست، یعنی یه سری داده خوندم و ریختم توش، حالا می خوام روی یکی از ستونهای اون عملیات فیلترینگ رو انجام بدم، با استفاده از یه حلفه، تمام سطرها رو خوندم و عملیات فیلتر رو دستی انجام دادم، اما اگر تعداد سطرها زیاد باشه، حلقه خیلی طولانی می شه که من نمی خوام این اتفاق بیفته. کسی نمی دونه چه طور می شه این کار رو سریع انجام داد.
اینم بگم که من توی سایت جستجو کردم، اما در مورد گرید ویویی که Bind نشده باشه چیزی پیدا نکردم
کدی که در حلقه دارید چه ریختیه؟
چطوری مقادیری را که میزریزید توش را بدست میارید؟

AmirAlimadadi
سه شنبه 21 مهر 1388, 14:26 عصر
به آرش : من خودم دو سه بار janus رو نصب کردم، اما چون کرک درست و حسابی نداشت ایراد می گرفت. چند نسخه متفاوت اون رو هم نصب کردم.

به آرژنگ : ببنید من در یه حلقه سطر به سطر گرید ویو رو می خونم، بعد مقدار (Value) ستونی که باید فیلترینگ روی اون انجام بگیره رو با مقدار خودم مقایسه می کنم، اگه برابر بود که هیچ، وگرنه اون سطر رو مخفی می کنم
(Visible = False)

اَرژنگ
سه شنبه 21 مهر 1388, 17:38 عصر
بچه ها کسی نیست که بتونه کمک کنه

شرط داخل لوپت چه ریختیه؟

AmirAlimadadi
چهارشنبه 22 مهر 1388, 01:08 صبح
شرط داخل لوپت چه ریختیه؟
همون طور که گفتم خیلی ساده


string str = this.Rows[i].Cells[j ].Value.ToString();
if(str == myVal)

من روی ستون j می خوام فیلترینگ انجام بشه

AmirAlimadadi
چهارشنبه 22 مهر 1388, 13:01 عصر
بچه ها کسی نیست که بتونه کمک کنه

اَرژنگ
چهارشنبه 22 مهر 1388, 13:35 عصر
بچه ها کسی نیست که بتونه کمک کنه
آخه به چی کمک کند؟
به اینکه ممکنه یک کاری یواش بشه؟
بیاید منطقی به این مشکل (؟) یک نگاه بندازیم:
۱.یک شرط ساده دارید که تند انجام میشه.
۲.ممکن است که در آینده مقدار داده‌ها زیاد بشه.

مگر همینطوری همه چی را میریزند در گرید ویو؟ داده‌ها را از کجا میگیرید؟ از کجا میان که نمیشه قبلش یک فیلتر داشت؟
بعضی چیزها با ماسمالی حل نمیشند، طراحیتان را مرور کنید و به جایه اینکه بخواهید چیزهایی که ممکن است مشکل بشند را حل کنید اول مشکلها را حل کنید.
این "یعنی یه سری داده خوندم و ریختم توش" یعنی چی؟ با چه روشی میخوانید؟ بر چه منطقی میروزو توش؟

AmirAlimadadi
پنج شنبه 23 مهر 1388, 00:33 صبح
آخه به چی کمک کند؟
به اینکه ممکنه یک کاری یواش بشه؟
بیاید منطقی به این مشکل (؟) یک نگاه بندازیم:
۱.یک شرط ساده دارید که تند انجام میشه.
۲.ممکن است که در آینده مقدار داده‌ها زیاد بشه.

مگر همینطوری همه چی را میریزند در گرید ویو؟ داده‌ها را از کجا میگیرید؟ از کجا میان که نمیشه قبلش یک فیلتر داشت؟
بعضی چیزها با ماسمالی حل نمیشند، طراحیتان را مرور کنید و به جایه اینکه بخواهید چیزهایی که ممکن است مشکل بشند را حل کنید اول مشکلها را حل کنید.
این "یعنی یه سری داده خوندم و ریختم توش" یعنی چی؟ با چه روشی میخوانید؟ بر چه منطقی میروزو توش؟
اولا ممنون از شما که وقت می ذارید و جواب میدین، ثانیا من مشکل خودم رو خیلی ساده بیان کردم، شما می خواین این مشکل رو پیچیده به نظر برسونید.
من فکر می کنم طراحی من مشکلی نداشته باشه، من فقط می خوام بدونم که چه طور می شه یه گرید ویویی که به هیچ جا بایند نشده (DataSource اون برابر Null) رو فیلتر کرد، یعنی کاربر فقط برخی از سطرها رو ببینه. همین!! حالا اینکه چه طور پر شده اصلا مهم نیست، اما اگه می خواین بدونین، باید بگم از یه فایل تکست اون رو خوندم و پر کردم، کاربر هم موقع اجرا می خواد فیلتر بکنه، یعنی ما باید تمام اطلاعات رو نشون کاربر بدیم، بعد کاربر به دلخواه یه رشته و یه ستون رو وارد می کنه، بعد اون سطرهایی که شامل رشته وارد شده در ستون مورد نظر بودن فقط نمایش داده میشن.
حالا من با یه حلقه این کار رو انجام دادم که خیلی طولانی بود(همون طور که گفتم)، می خوام بدونم آیا .Net ابزار، کلاس یا شیی داره که بشه اون رو به گرید وصل کرد و با اون عملیات فیلترینگ رو انجام داد، بازم قبلا گفته بودم که من راههایی برای گرید ویوی بایند شده بلدم، اما اینجا گرید ویو بایند نشده.
اصلا هم دنبال ماستمالی نیستم. اگه راهی به ذهنتون رسید ممنون می شم کمک کنین.

اَرژنگ
پنج شنبه 23 مهر 1388, 02:53 صبح
حالا من با یه حلقه این کار رو انجام دادم که خیلی طولانی بود(همون طور که گفتم)، می خوام بدونم آیا .Net ابزار، کلاس یا شیی داره که بشه اون رو به گرید وصل کرد و با اون عملیات فیلترینگ رو انجام داد، بازم قبلا گفته بودم که من راههایی برای گرید ویوی بایند شده بلدم، اما اینجا گرید ویو بایند نشده.
اصلا هم دنبال ماستمالی نیستم. اگه راهی به ذهنتون رسید ممنون می شم کمک کنین.

امیرجان،
چیزی که من نمیفهمم این است که
چطوری یک شرط ساده یواش است؟ این مشکل گیری به شما نیست، از اینکه یک شرط را یکی یکی بر هر Row گرید امتحان کنیم روش سریعتری وجود ندارد (نه برایه داتاگریدویو بلکه برایه هر لیستی) ولی شما میتوانید نمایش داده شدن را تندتر جلوه بدید.

همان روشی که برایه رنگی کردن سلهایه داتاگرید استفاده میشه، استفاده کنید که فقط اینکه در ظاهر بعضی چیزها فیلتر شدن ِدر زمان نشان دادنشان پیاده کنید، به این شکل لازم نیست که همه چی را از اول فیلتر کرده باشید.

۲. اگر یک لحضه تامل کنید، به روش ریاضی عمل کنید، به این نکات توجه کنید ( نکاتی که خودتان گفتید ، نه من):
۱.داتا گرید را دستی پر میکنم
۲.به خاطر اینکه دستی پر میکنم، نمیتونم از روشهایه بایندینگ برایه فیلتر کردن استفاده کنم.

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

لطفاً اگر چیزهایی که میگم به کارتان نمیاد بگید کد را مستقیماً درست کنم ، ولی باور کنید راه حل شما دست خودتان است.

اگر به جایی اینکه مسقتیم بریزید در داتا گرید، از چیزی که از Linq بشه باهاش کار کرد استفاده کنید، قدرت Linq هم زیره دستتان خواهد بود و احتیاجی از استفاده از لوپ نخواهید داشت (ولی تندترین روش select بر رویه یک کلکشن که سورت نشده همین است و به گرید بودن و یا نبودن ربطی ندارد).

AmirAlimadadi
پنج شنبه 23 مهر 1388, 14:08 عصر
بازم ممنون از راهنماییتون. من هم می دونم که اگه از گریدی که بایند شده استفاده کنم، می تونم از خیلی از امکانات موجود در .Net استفاده کنم، اما مسئله من اینه که به خاطر اینکه می خوام امکانات دیگه ای به گرید بدم، نمی تونم از گرید بایند شده استفاده کنم (اگه بخوام در مورد امکانات صحبت کنم خیلی طولانی میشه). بنابراین استفاده از گرید بایند نشده برای من یه انتخاب نیست، یه اجباره!!!!
در مورد شرط داخل حلقه هم باید بگم سریع انجام می شه، اما موقعی که حلقه زیاد باشه، اجرای اون شرط طولانی می شه، بازم جواب سوال رو نگرفتم، که آیا .Net برای ما این امکان رو فراهم می کنه که از ابزار یا کلاس و یا ... استفاده کنیم تا یه گرید ویو رو به شکلی که گفتم فیلتر کنیم؟؟
ممنون

اَرژنگ
پنج شنبه 23 مهر 1388, 14:15 عصر
بازم ممنون از راهنماییتون. من هم می دونم که اگه از گریدی که بایند شده استفاده کنم، می تونم از خیلی از امکانات موجود در .Net استفاده کنم، اما مسئله من اینه که به خاطر اینکه می خوام امکانات دیگه ای به گرید بدم، نمی تونم از گرید بایند شده استفاده کنم (اگه بخوام در مورد امکانات صحبت کنم خیلی طولانی میشه). بنابراین استفاده از گرید بایند نشده برای من یه انتخاب نیست، یه اجباره!!!!
در مورد شرط داخل حلقه هم باید بگم سریع انجام می شه، اما موقعی که حلقه زیاد باشه، اجرای اون شرط طولانی می شه، بازم جواب سوال رو نگرفتم، که آیا .Net برای ما این امکان رو فراهم می کنه که از ابزار یا کلاس و یا ... استفاده کنیم تا یه گرید ویو رو به شکلی که گفتم فیلتر کنیم؟؟
ممنون
شما میتوانید نمایش داده شدن را تندتر جلوه بدید.
همان روشی که برایه رنگی کردن سلهایه داتاگرید استفاده میشه، استفاده کنید که فقط اینکه در ظاهر بعضی چیزها فیلتر شدن ِدر زمان نشان دادنشان پیاده کنید، به این شکل لازم نیست که همه چی را از اول فیلتر کرده باشید.

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