+2 امتیاز

سلام وقبل از همه چیز ممنون از وقتی که میگذارید . راهنمایی که میدید

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

من یه برنامه نمونه ساختم که با استفاده از برنامه نویسی چند لایه و با کلاس بندی و بدون ویزارد و با کد نویسی به دیتا بیس وصل شده من برای اینکه تو شبکه یا وقتی کسی با اینترنت به برنامه وصل میشه سرعت لود پایین نیاد میخوام برنامه به این صورت که توضیح میدم عمل کنه قاعدتا موضوع امنیت هم وسط میاد پس با کلی تحقیق به این نتیجه رسیدم که باید این روش استفاده بشه لطفا جای نقد اگه راه حلی دارین یا میدونید چیکار کنم برنامه رو ادیت کنید من هم از روش یک آموزش می سازم میذارم تو سایت تا همه استفاده کنن نمونه اولیه برنامه رو هم برای دانلود تو ادامه مطلب گذاشتم برنامه با ویژوال استدیو 2013 و زبان C# و دیتابیس SQL Server 2014 ساخته شده بک آپ دیتا هم تو فایل ضمیمه شده

در درجه اول میخوام بدون استفاده از ویزارد bindingNavigator به DataGridView وصل بشه با کد نویسی و استفاده از کلاس نه اینکه تو هر فرم بیایم کانکشن بسازیم میخوام جای اون از کلاس فراخوانی کنیم و جای اینکه کل دیتا رو بیاریم تو DataGridView از SQL Server مثلا 10تا 10 تا دیتا فراخوانی بشه مثلا با این دستور

Select Top (10) * from Ware Order By ID

و جستجو هم از همانجا یعنی SQL انجام بشه اینجوری هم اور لود برنامه خیلی پایین میاد هم امنیت بالا میره هم ترابل شوتینگ راحت میشه هم برنامه با استاندارد پیش میره

برنامه باید 7تا گزینه اصلی داشته باشه ( بعدی، قبلی، اولی، آخری، صفحه بعد و صفحه قبل و سرچ ) که ( بعدی، قبلی، اولی، آخری ) درست کار میکنه واسه صفحه بعد  کافیه مثلا بگیم TOP هرچی هست +10 بشه و مثلا از 1تا 10 بره 11تا20 یا برعکس -10 بشه برای صفحه قبل کد سرچ هم که راحته بعدی قبلی اولی و آخری هم که وقتی bindingNavigator وصل بشه به DataGridView خود به خود انجام میشه در کل اگه بتونید فقط bindingNavigator  رو تو برنامه نمونه من درست وصل کنید بقیش رو خودم تکمیل میکنم با آموزش کامل میذارم تو سایت اصل مبحث هم تو قسمت نظرات سایت هستش 

http://www.w3-farsi.com/%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D9%87-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%D9%87%D8%A7/

باز هم شرمنده وقتتون رو گرفتم و ممنون از کمکتون

این هم لینک دانلود برنامه نمونه

http://cnmeysam.persiangig.com/C sharp/class_library_Connection.zip/download

http://cnmeysam.persiangig.com/C sharp/class_library_Connection.rar/download

بسته شده

1 پاسخ

+3 امتیاز
 
بهترین پاسخ

سلام دوست خوبم ، ببینید در کامنت های قبلی هم گفتم که بهترین روشی که برای Paging وجود داره اینه که عمل صفحه بندی رو در سطح Database انجام بدین . چون که شما از SQL Server استفاده می کنید خیلی راحت می تونید این عمل رو انجام بدین . من خلاصش رو می گم . ببینید شما باید ابتدا سطر های پایگاه داده رو از 1 شماره گذاری کنید ( تابع ROW_NUMBER در SQL Server می تونه این کار رو براتون انجام بده ) ، بعد از این کار شما باید عمل فیلترینگ رو بر اساس این ستون انجام بدین . مثلا فرض کنید قصد دارید در هر صفحه 100 رکورد رو نمایش بدین ، قسمت Where ش به صورت زیر میشه :

WHERE number between 1 and 100 ( )

ستون number رو با استفاده از همون تابع ROW_NUMBER ایجاد می کنیم 

برای صفحه بعدی

WHERE number between 101 and 201

و به همین صورت .

مزایای این روش اینه که عمل صفحه بندی در سطح Database انجام میشه و واسه کار شما که می خواین داده ها رو در طول شبکه انتقال بدین بهترین روش هست. اون روشی که در پیش گرفتید روش جالبی نیست چونکه عمل صفحه بندی در برنامه انجام میشه . ممکنه در تعداد رکورد های پایین مشکلی ایجاد نکنه ولی در تعداد رکورد های بالا به شدت کند میشه چون برنامه بیشتر وقتش رو در RAM صرف می کنه و باید تمامی رکورد ها در حافظه Load بشن که به شدت ایده بدی هست و Performance و سرعت برنامه به شدت پایین میاد . خودم در طراحی برنامه هام اصلا از BindingSource و Navigator استفاده نمیکنم و ترجیح می دم از همین روش کد نویسی استفاده کنم . چون بهترین روش هست به نظرم و دستتون برای طراحی و دستکاری برنامه بسیار بازه .

بنده برنامه شما رو تغییر دادم . در این برنامه یک کلاس هست به نام PageBoundries که عمل اندیس گذاری صحیح رکورد ها رو انجام میده . وقتی که اندیس ها مشخص شدند خیلی راحت می تونید یک کوئری که در کامنت های قبلی هم نوشتم روش بانک اجرا کنید و سطر ها رو واکشی کنید . سعی کردم کدها رو واضح بنویسم . هر جایی از کدها سوالی داشید بپرسید . به طور خلاصه اومدم یک BindingNavigator بهینه طراحی کردم .

چیز هایی که شما باید تغییر بدین واس برنامه خودتون :

1 – رشته اتصال

2 – کوئری بدست آوردن تعداد رکورد های جدول مورد نظرتون ( TotalRecords )

3 – کوئری واکشی اطلاعات یا همون List .

اینا رو بسته به بانک اطلاعاتی خودتون ویرایش کنید .

 

اینم پروژش :

http://cld.persiangig.com/dl/FQXoV/7ZCPwI3kxX/PagingWithBindingNavigator.zip

ممنون از راهنمایی و وقتی که گذاشتین ولی باز متوجه خواسته من نشدین همونطور که قبلا گفتم مشکل من صفحه بندی نیست دقیقا همین پروژه که گذاشتین آموزشش رو بصورت فیلم دارم قبلا هم گفتم من 1ماه وقتمو گذاشتم فقط واسه دیتا گرید امکانتش و خواسته ای که داشتم اگه بخواین لینک تک تک فایل ها و سایت ها رو هم میدم بهتون مشکل اصلی من اتصال درست نویگیتور به دیتاگرید و کل اینها به دیتابیس با استفاده از کد نویسیه همین فقط این اتصالات جوری باشه که به قول شما کل دیتابیس فراخونی نشه که وقتی میخوام به این قسمت آخر یعنی صفحه بندی برسم مثلا 10 تا 10تا از دیتا بیس فراخونی کنم نه اینکه کل دیتا فراخونی بشه بعد به گرید بگم 10تاشو نمایش بده بعد وقتی نکست میزنم بگم 10تای بعدی شما اصل مشکل که نویگیتور برای بعدی قبلی وآخریو اولیه بیخیال شدی رفتی صفحه بعد صفحه قبل صفحه اول صفحه آخر رو میگی؟؟؟؟؟
باز ممنون از راهنماییتون
ویرایش شده توسط
توسط (107 امتیاز) 1 1 5
من یک سوال از شما دارم : چه چیزی از BindingNavigator دیدید که حتما باید ازش استفاده کنید ؟ ؟

شما قصد دارید در پروژتون عمل صفحه بندی رو انجام بدین ، چه دلیلی وجود داره که حتما باید از این کنترل استفاده کنید ؟
توسط (6,145 امتیاز) 5 11 116
به خدا مشکل صفحه بندی نیستااااااا

مشکل کار کردن گزینه های بعدی قبلی اولی و آخری و اضافه و حذف نویگیتوره صفحه بندی از روش شما انجام میشه من بعدی قبلی اولی آخری رو درست کردم ولی از اونجا که اتصالم به دیتا بیس اشتباه هستش حذف و اضافه کار نمیکنه همین میخوام تو همین پروژه اینا درست بشه که لایه و کلاس بندیش بهم نخوره تا بتونم درست درکش کنم و تو همه پروژه هام از این بتونم استفاده کنم
توسط (107 امتیاز) 1 1 5
دوست خوبم حذف و اضافه که دیگه کاری نداره ، وقتی صفحه بندی رو انجام بدین دیگه مشکلی نداره به راحتی می تونید عمل حذف رو هم انجام بدین . کامل توضیح بدین که وقتی عمل صفحه بندی رو از طریق من انجام می دین چه مشکلی بابات حذف داده ها پیش میاد ؟؟؟ چه خطایی میده ؟؟؟کجای پروژتون دستکاری میشه . منظورتون از " اتصال به دیتابیس اشتباه هست" چیه ؟ تا جایی که بنده با خبر هستم به هیچ عنوان لایه بندی و کلاس بندی پروژتون خراب نمیشه .
توسط (6,145 امتیاز) 5 11 116
به خدا من هکر نیستماااااا چرا میترسین پروه رو دانلود و تست کنید؟ هم بک آپ دیتا بیس توش هست هم خود پروژه کدنویسی رو ببینید متوجه میشید من نمیخوام تغییرش بدین و یه چیز جدید بدین بهم میخوام پروژه خودم اون قسمتش که مشکل داره مشکلش برطرف بشه.بله حذف و اضافه راحت هست کد نویسیش ولی من میگم چرا مال نویگیتور من درست عمل نمیکنه آخه؟

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

من فقط گفتم این پروژه خوروجیش قراره صفحه بندی هم داشته باشه جستجو هم داشته باشه ولی مشکل  من درست عمل نکردن نویگیتوره همین
ویرایش شده توسط
توسط (107 امتیاز) 1 1 5
من از نویگیتور چیزی ندیدم موضوع یاد گیری منابع موجود هستش اون هم به روش درست و استاندارد برای مثال میگم من تو پروژم البته نه این یکی یه نمودار میخواستم که از چارت C# استفاده  میکرد ولی چون تعداد خروجی هام زیاد بود تقریبا 24 تا  موقع ساختن میله های عمودی میله ها به قدری نازک میشد که تقریبا دیده نمیشدن کلی سرچ کردم کلی سوال کردم کسی نتونست مشکل رو حل کنه چون همه یه مدل یاد میگیرن کاری ندارن اون روش درسته یا نه و چون مشکلشون رو حل کرده همون روش دنبال چیز بهتر نمیرن در این مورد هم دقیقا همینطور شده شما میگی چون خودم میتونم باتن بسازم و همون عملیات رو انجام بدم پس نیازی نیست دنبال چیز دیگه برم من هم میگم میخوام از منابع موجود بتونم درست استفاده کنم و جای اینکه بیام دوباره سیستم  رو اختراع کنم سیستمی که موجوده ارتقاع بدم وگرنه من تا قبل این پروژه نیازی بهش نداشتم موضوع فقط یاد گیری مطلب هست اون هم اصولی و کامل و درست
نمایش از نو توسط
توسط (107 امتیاز) 1 1 5

" به خدا من هکر نیستماااااا چرا میترسین پروه رو دانلود و تست کنید؟ "

همون پروژه ای که در همین صفحه قرار دادم تغییر یافته پروژه خودتون بود . فکر کنم شما پروژه منو دانلود نکردید که ساختارش همون پروژه خودتونه !!

" هم بک آپ دیتا بیس توش هست هم خود پروژه کدنویسی رو ببینید متوجه میشید من نمیخوام تغییرش بدین و یه چیز جدید بدین بهم میخوام پروژه خودم اون قسمتش که مشکل داره مشکلش برطرف بشه"

ببینید قبلا هم گفتم که بنده نمی تونم پایگاه داده شما رو ببینیم چون نسخه SQL Server او 2008 هست و خودم اومدم یک پایگاه داده دیگه ساختم برای تست کد ها . شما یکبار میگید عمل صفحه بندیم مشکل داره ، یک بار دیگه می گید عمل درج و حذف مشکل داره . سوالتون رو دقیق بپرسید .

"چون خودم میتونم باتن بسازم و همون عملیات رو انجام بدم پس نیازی نیست دنبال چیز دیگه برم"

خیر بنده همچین حرفی نزدم . شما میگید عمل صفحه بندی مشکل داره(در جملات قبلیتون و در همون تاپیک ساخت فایل نصب ) . بعدش گفتید که با این عمل صفحه بندی انتقال داده ها در شبکه مشکل پیدا می کنه . من هم اومدم یک نمونه برنامه واستون ساختم که روش درس عمل صفحه بندی رو انجام میده . الزما چیزهایی که الان وجود دارن بهترین نیستن. مثل همین Binding Navigator . بهترین روش Paging همین روش بنده هست که عمل صفحه بندی رو در سطح database انجام میده . نیازی به توضیح اضافه نیست و می تونید جواب های قبلی بنده رو بخونید .

جوابتون :

برای اینکه عمل حذف کار کنه ، روی Binding Navigator کلیک کنید و سپس خاصیت DeleteItem رو روی none قرار بدین . سپس روی آیکون Delete در Binding Navigator دابل کلیک کنید و کد های حذف رو مستقیم بنویسید . برای عمل درج هم همینطور.

 

توسط (6,145 امتیاز) 5 11 116

شاید من منظورم رو بد مطرح کردم شرمنده و ممنون که وقت میگذارید و جواب میدین

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

من پروژه شما رو دانلود کردم و تست هم کردم اگه نکرده بودم از کجا میدونستم شما جای نویگیتور باتن جدید ساختید؟ منظور و خواسته من همونطور که تو پست قبل گفتم اینه که نویگیتور درست عمل کنه دلیل اینکه گفتم نمیخوام تغییر بدین این بود که شما کلاسهایی که توش تیبل های من بود رو حذف کردین و من وقتی به مشکل میخورم که اینها همه جزء به جزء تفکیک میشه یعنی یک کلاس برای کانکشن یکی برای تیبل ها یکی برای صفحه بندی و چون تازه کارم درک پایین تری نسبت به شما از کد دارم و قاطی میکنم وقتی کاملا تفکیک میکنم همه چیز رو

یعنی الان روش و نحوه اتصال دیتابیس من به دیتا سورس و نویگیتور و گرید ویو درسته؟

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

آیا راهی نیست که تو پروژه من با روشی که میخوام نویگیتور کاملا درست کار کنه؟ یعنی برای هر باتنش کد جدا ننویسیم وبعد از اتصال مثل حالت ویزارد کامل و درست کار کنه؟

ویرایش شده توسط
توسط (107 امتیاز) 1 1 5
دلیل اینکه کار کار نمیکنه اینه که شما کدی برای حذف اطلاعات ننوشتید . شما فقط اومدید عمل SELECT رو در کدهاتون نوشتید و هیچ کدی برای حذف اطلاعات ننوشتید !! BindingNavigator هم واس همینه که نمی تونه از بانک اطلاعاتی رکورد مربوطه رو حذف کنه . علت اینی که رکورد رو از datagridview حذف می کنه و از بانک حذف نمی کنه هم همینه . شما باید کد ها رو به صورت دستی بنویسید .
توسط (6,145 امتیاز) 5 11 116
خیلی خیلی ممنون که این مدت منو تحمل کردین و نکته به نکته جواب دادین من تو اولین فرصت یه آموزش کامل از این موضوع درست میکنم لینکشم اینجا میذارم اگه خوب بود و درست بود بذارینش تو سایت امیدوارم بتونم با این آموزش به آدمایی مثل خودم کمک کنم که دیگه 2ماه معطل نشن
توسط (107 امتیاز) 1 1 5
خواهش می کنم دوست خوبم . بله باهاتون موافقم .خیلی عالی میشه .

با نام و ایمیل خودتون در سایت درج میشه .

مرسی
توسط (6,145 امتیاز) 5 11 116

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

ویرایش شده توسط
توسط (107 امتیاز) 1 1 5
سلام ، ببینید نیازی به ذخیره اطلاعات رشته اتصال SQL Server در بانک اطلاعاتی اکسس نیست . شما می تونید این اطلاعات رو در App.Config ذخیره کنید . بعدش حتما این فایل رو رمز کنید که آموزشش در سایت قرار داده شده .

امنیتش هم خیلی خوبه ، چون با الگوریتم های رمزنگاری خیلی پیشرفته ای این فایل رو رمز می کنه .

کارایی برنامتون رو هم بالاتر میره چون نیازی نیست برای خوندن اطلاعات رشته اتصال هر بار به بانک اطلاعاتی اکسس وصل شد .
توسط (6,145 امتیاز) 5 11 116
سلام آموزش اینکه اطلاعات رو تو اون فایل کانفیگ ذخیره و فراخوانی کنم رو از کجا بگیرم؟
توسط (107 امتیاز) 1 1 5

سلام تو آموزش اولی فقط نحوه فراخوانی از فایل کانفیگ توضیح داده شده از دومی هم اصلا سر در نیاوردم

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

string myCon="Data Source="+TxtServer.Text+";Initial Catalog="+TxtData.Text+";User Id="+TxtUser.Text+";Password="+TxtPassword.Text;

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

http://cnmeysam.persiangig.com/C sharp/Connection.zip/download

http://cnmeysam.persiangig.com/C%20sharp/Connection.zip/download?4c28

باز شرمنده و ممنون از وقتی که میذارید

ویرایش شده توسط
توسط (107 امتیاز) 1 1 5

چرا کسی جواب نمیده؟broken heart

توسط (107 امتیاز) 1 1 5

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

http://cnmeysam.persiangig.com/C%20sharp/Connection.zip/download

توسط (107 امتیاز) 1 1 5
با کلی بدبختی فایل رو درست کردم هم ذخیره کردم هم فراخوانی میشه یکی کمک کنه بگه چطور تو یک کلاس کانکشن استرینگی که تو فایل تکست ذخیره کردم فراخوانی کنم و تو کانکشن استرینگ جایگزین کنم!!!؟؟؟
|لینک دانلود پروژه::http://cnmeysam.persiangig.com/C%20sharp/Connection.zip/download|
توسط (107 امتیاز) 1 1 5

ممنون از وقتی که گذاشتین 

من اطلاعات کانکشن رو از یک فرم گرفتم توی یه فایل به اسم maysam1.txt ذخیره کردم یعنی تو اون فایل خط اول نوشته شده:

 

Data Source=maysam;Initial Catalog=DtaConnection;Integrated Security=True

 

حاا نمیدونم چطور تو کلاس کانکشنم بیارمش جای کانکشن استرینگ یعنی اینجا:

 

 

     public string ConnectionString = "Data Source=.;Initial Catalog=DtaConnection;Integrated Security=True";

 

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

 

توسط (107 امتیاز) 1 1 5
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,920 کاربر

دسته بندی ها

...