PDA

View Full Version : راهنمایی برای چند مشکل در پروژه



mahtab_m
دوشنبه 03 اسفند 1388, 18:51 عصر
سلام.
من در حال نوشتن یک برنامه مدیریت دوره های آموزشی کارمندان هستم.
یک بانک اطلاعاتی دارم شامل جدول های زیر

1-کارمند
آی دی کارمند(employeeID)
نام
نام خانوادگی
..

2- دوره ها
آی دی دوره(CourseID)
نام دوره
مدت دوره به ساعت
..

3- نمره
آی دی دوره(CourseID)
آی دی کارمند(employeeID)
نمره

4- خلاقیت ها
آی دی کارمند(employeeID)
عنوان خلاقیت
ساعت معادل آموزش

یک table adaptor اضافه کردم شامل همه جدول های بالا

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

محمدی – تافل-مقاله
محمدی-تافل-پیشنهاد
محمدی-آیلتس-مقاله
محمدی-آیلتس-پیشنهاد

یعنی میاد حاصلضرب دکارتی اونها رو حساب می کنه.
و در این صورت وقتی میخوام حاصل جمع تعداد ساعاتی که کارمند دوره گذرانده رو حساب کنم اشتباه میشه. حاصل جمع در تعداد خلاقیت ها ضرب میشه.


یه مشکل دیگه هم دارم.
دو تا data gridview دارم. یه دکمه درست کردم . روی سطر های یه جدول که کلیک می کنم وقتی روی دکمه کلیک می کنم به جدول دیگه منتقل میشه.حالا برای اینکه چک کنم داده تکرای اضافه نکنم از کد زیر استفاده کردم.




reg = true;

for (int i = 0; i < dataGridViewregister2.RowCount; i++)
{
if ((Convert.ToInt32(dataGridViewRegister1.SelectedRo ws[0].Cells["employeeIDDataGridViewTextBoxColumn1"].Value.ToString())) ==
(Convert.ToInt32(dataGridViewregister2.SelectedRow s[i].Cells["ColumnEmployeeID"].Value.ToString())))
{
reg = false;
break;

{



برای یک کارمند دست جواب میده اما وقتی روی یه سطر دیگه امتحان میکنم خطا میده و از برنامه خارج میشه.
لطفا راهنمایی کنید .هر کاری می کنم درست نمیشه.
اگه متوجه منظورم نشدید بگید تا بیشتر توضیح بدم

SMRAH1
دوشنبه 03 اسفند 1388, 19:24 عصر
سلام
1) احتمالا می خواهی اطلاعات هر فرد + دوره + خلاقیت رو با هم نشون بدی،اما این به معنی نمایش یکجا نیست.شما می تونید سه تا DataGridView داشته باشی که یکی اطلاعات افراد،و دوتای دیگه به ترتیب اطلاعات دوره فرد انتخاب شده و خلاقیت فرد انتخاب شده رو نشون میده.برای این حالت باید از مفهومی که به Master/Detail معروفه،استفاده کنی (جستجو کنی در مورد این مطلب در سایت پیدا خواهی کرد).
2) توی دستور if که گذاشتی،باید در اولی (شرط if) از همون SelectedRow استفاده کنی،ولی در بدنه if،یاید از Rows استفاده کنی.
موفق باشی

mahtab_m
دوشنبه 03 اسفند 1388, 20:37 عصر
از راهنمایی تون واقعا ممنونم.
یک هفته درگیر مشکل دومی بودم. که بلاخره با راهنمایی شما درست شد.

اما در مورد مشکل اولی من نتونستم درباره master/detail مطلب پیدا کنم.

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

تا اینجا درسته. بعد یه دکمه چاپ گزارش(چاپ اطلاعات جامع کارمند) دارم که یه گزارش با کریستال ریپورت درست کردم و توی اون دو تا subreport دارم که یکی مربوط دوره ها و یکی مربوط به خلاقیت ها.

برای دکمه چاپ این کد رو قرار دادم



{
int x = Convert.ToInt32(dataGridViewReportEmployee1.Select edRows[0].Cells["dataGridViewTextBoxColumn14"].Value.ToString());
dataTableGradeTableAdapter.FillByEmployeeID(univer sityDataSet2.DataTableGrade, x);
dataTableCreativityViewTableAdapter.FillByEmployee ID(universityDataSet2.DataTableCreativityView, x);
}

PrintEmployeeCourse m = new PrintEmployeeCourse(universityDataSet2);
m.ShowDialog(this);



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

حالا من می خوام حاصل جمع ساعاتی که کارمند در دوره های آموزشی گذرانده رو با هم جمع کنم.
حاصل جمع ساعات معادل آموزش برای ابتکاراتی که انجام داده را هم با هم جمع کنم.
حاصل این دو تا رو هم با هم جمع کنم تا ساعات کلی کارمند حساب بشه.

حاصل جمع ساعات دوره ها که حساب میشه مشکلی نداره. اما وقتی ابتکارات رو هم حساب می کنم .حاصل جمع ساعات دوره ها در تعداد خلاقیت ها ضرب میشه
نمی دونم این مشکل رو چه جوری توضیح بدم

SMRAH1
دوشنبه 03 اسفند 1388, 21:41 عصر
سلام
شما تقریبا ار همان ایده master/detail استفاده کرده اید.
در مورد dataTableGrade هم بهتره عبارت SQL دقیق رو که استفاده کرده اید بگذارید تا شاید مشکل پیدا بشه
موفق باشید

mahtab_m
دوشنبه 03 اسفند 1388, 22:02 عصر
SELECT Grade.GradeID, Grade.HeldCourseID, Grade.Grade, HeldCourse.CourseYear, HeldCourse.BeginDate, HeldCourse.EndDate,
HeldCourse.ExecutiveInstitude, Course.CourseTitle, Course.CourseTime, Course.CourseTypeID1, Course.CourseTypeID2, CourseType2.CourseType2,
CourseType1.CourseType1, Employee.EmployeeID, Employee.PersonalNumber, Employee.Name, Employee.Family, Employee.FatherName,
Employee.IdentificationCertificate, Employee.IssuePlace, Employee.NationalCode, Employee.BirthDate, Employee.EmploymentTypeID,
Employee.OrganizationUnitID, Employee.ClassID, Employee.FieldID, Employee.DegreeID, Grade.StateID, State.StateName, Field.FieldTitle,
Organization.OrganizationUnitTitle, Class.ClassTitle, HeldCourse.CourseID
FROM Grade INNER JOIN
HeldCourse ON Grade.HeldCourseID = HeldCourse.HeldCourseID INNER JOIN
Course ON HeldCourse.CourseID = Course.CourseID INNER JOIN
CourseType1 ON Course.CourseTypeID1 = CourseType1.CourseTypeID1 INNER JOIN
CourseType2 ON Course.CourseTypeID2 = CourseType2.CourseTypeID2 INNER JOIN
Employee ON Grade.EmployeeID = Employee.EmployeeID INNER JOIN
State ON Grade.StateID = State.StateID INNER JOIN
Organization ON Employee.OrganizationUnitID = Organization.OrganizationUnitID INNER JOIN
Field ON Employee.FieldID = Field.FieldID INNER JOIN
Class ON Employee.ClassID = Class.ClassID



من جدول ها رو خلاصه براتون توضیح داده بودم.
من علاوه بر جدول دوره جدول دوره برگزار شده هم دارم(heldcourse)که آی دی دوره رو تو خودش داره.

mahtab_m
دوشنبه 03 اسفند 1388, 22:05 عصر
ببخشید یه سوال دیگه هم دارم. از اونجایی که مقاله ساخت splash رو شما نوشته بودین، میشه روال کار رو وقتی قرار بین دو فرم نمایش داده بشه توضیح بدین.
می در این پروژه می خوام بعد از فرم لاگین ، وقتی می خوام به فرم اصلی برنامه برم یک اسپلش داشته باشم.
اگه یه برنامه نمونه هم بذارین ممنون میشم.

SMRAH1
دوشنبه 03 اسفند 1388, 23:16 عصر
سلام
1) تا حالا به این توجه نکرده بودم: عنوان تاپیک نامناسب انتخاب شده (خلاف مقررات)
2) با ابنکه با توجه به توضیحات شما،به نظر می رسه از Master/Detail استفاده کردید،ولی یک نمونه از اون رو تهیه کردم (برای اینکه دوستان تازه کار که احتمالا به این تاپیک می رسند سر در گم نشن).در ضمن در همین نمونه یک جدول به نام Sum_Khalaghiat ساختم (در فرم خروجی نشان داده نمی شود)،که مجموع زمان خلاقیت هر فرد رو جمع و نشان میده (بهتره به جای جمع DataGridView و .. از خوده SQL استفاده کنید که در این نمونه خواهید دید).
3) طبق قوانین سایت در هر تاپیک باید یک سئوال مطرح بشه و سئوال splash جاش اینجا نیست.با این حال جواب مختصر شما اینه : به طور کلی splash در مواقعی کاربرد داره که فرم اصلی هنوز بار نشده و باید یک فرم جانشین نمایش داده بشه تا فرم اصلی بار بشه.اما شما در برنامه خود باید فرم اصلی را بار کرده باشید (چون فرم logon رو نشون می دید تا کاربر کلمه عبور و پسورد رو بزنه که این اتقاق دقیقا باید در Form_Load فرم اصلی بیافتد).در این حالت کافیه فرم مورد نظر برای splash رو با show نمایش بدید و بعد از چند لحظه (بهتره از sleep برای این منظور استفاده کنید)،فرم splash مخفی شده و در نهاید فرم اصلی به کار خودش ادامه بده.
موفق باشید

mahtab_m
سه شنبه 04 اسفند 1388, 13:40 عصر
فکر نمی کنم عنوان تاپیک نا مناسب باشه. آخه من چند مشکل داشتم