gwbasic
پنج شنبه 02 تیر 1390, 11:50 صبح
در تاپیک زیر به آموزش Data Binding پرداختم:
http://barnamenevis.org/showthread.p...8-Data-Binding (http://barnamenevis.org/showthread.php?288558-Data-Binding)
قبل از اینکه به ادامه آموزش ومبحث Master Details بپردازم ، سوالی رو مطرح می کنم! هر کسی علاقمند بود می تونه این سوالو جواب بده و در حقیقت کد این برنامه رو بنویسه در پایان جواب رو همراه با آموزش در تاپیک بالا قرار می دم.
بهتره در کدتون از DataBinding استفاده کنید ولی محدودیتی وجود نداره هر طوری که مایلید می تونید بنویسید. از آموزش تاپیک بالا هم می تونید استفاده کنید.
اما سوال:
فرض کنید دو کلاس دارید به نامهای Course دارای پراپرتی های Id,Name,Grade (کد درس و نام درس و نمره) و Student که دارای پراپرتی های Name, Age و دارای لیستی از دورسCourses می باشد.
publicclassCourse
{
privateint id;
publicint Id
{
get { return id; }
set { id = value; }
}
privatestring name;
publicstring Name
{
get { return name; }
set { name = value; }
}
privateint grade;
publicint Grade
{
get { return grade; }
set { grade = value; }
}
public Course()
{
}
public Course(int cid, string cname, int g)
{
Id = cid;
Name = cname;
Grade = g;
}
}
publicclassStudent
{
privatestring name;
publicstring Name
{
get { return name; }
set { name = value; }
}
privateint age;
publicint Age
{
get { return age; }
set { age = value; }
}
BindingList<Course> courses;
publicBindingList<Course> Courses
{
get { return courses; }
set { courses = value; }
}
public Student()
{
}
public Student(string n, int a)
{
Name = n;
Age = a;
}
}
فرمی دارید به شکل زیر:
71491
که دارای دو لیست باکس که یکی شامل لیست دانش آموزان و دیگری شامل لیست دورس مربوط به دانش آموز انتخاب شده در لیست باکس اولی می باشد و با سکرول روی لیست باکس دانش آموزان هم تکس باکس ها تغییر می کند و هم لیست دروس آن دانش آموز در لیست باکس مربوطه. ضمنا با اسکرول لیست باکس دروس درس مربوطه در تکس باکسهای مربوط به آنها نمایش داده می شود و مهمترین مسئله این است که با تغییر مقادیر تکس باکس ها بقیه کنترل ها هم بروز می شود. مثلا اگر نمره یک درس تغییر می کند ضمن اینکه این تغییر در لیست باکس دروس بصورت همزمان نمایش داده می شود معدل دانش آموز هم در لیست باکس دانش آموزان نیز بروز شود.
تنها نکته ای که باقی می مونه اینه که داده ها از قبل به صورت Hard Code در فرم قرار دارند و در فرم فقط میتوان آنها را ویرایش کرد و امکان اضافه یا حذف وجود ندارد
privatevoid Initialize()
{
Students = newBindingList<Student>();
Student stu = newStudent("Mohsen", 18);
stu.Courses = newBindingList<Course>();
stu.Courses.Add(newCourse(1, "Math", 12));
stu.Courses.Add(newCourse(2, "Physics", 15));
stu.Courses.Add(newCourse(3, "Chemistry", 16));
Students.Add(stu);
stu = newStudent("Ali", 19);
stu.Courses = newBindingList<Course>();
stu.Courses.Add(newCourse(1, "Physics", 20));
stu.Courses.Add(newCourse(2, "Math", 18));
stu.Courses.Add(newCourse(3, "Chemistry", 19));
Students.Add(stu);
stu = newStudent("Maryam", 15);
stu.Courses = newBindingList<Course>();
stu.Courses.Add(newCourse(1, "Physics", 18));
stu.Courses.Add(newCourse(2, "Math", 15));
stu.Courses.Add(newCourse(3, "Chemistry", 12));
stu.Courses.Add(newCourse(4, "Aljebra", 10));
Students.Add(stu);
}
لطفا پروژه زیر را کامل کنید و در همین تاپیک UpLoad کنید
http://barnamenevis.org/showthread.p...8-Data-Binding (http://barnamenevis.org/showthread.php?288558-Data-Binding)
قبل از اینکه به ادامه آموزش ومبحث Master Details بپردازم ، سوالی رو مطرح می کنم! هر کسی علاقمند بود می تونه این سوالو جواب بده و در حقیقت کد این برنامه رو بنویسه در پایان جواب رو همراه با آموزش در تاپیک بالا قرار می دم.
بهتره در کدتون از DataBinding استفاده کنید ولی محدودیتی وجود نداره هر طوری که مایلید می تونید بنویسید. از آموزش تاپیک بالا هم می تونید استفاده کنید.
اما سوال:
فرض کنید دو کلاس دارید به نامهای Course دارای پراپرتی های Id,Name,Grade (کد درس و نام درس و نمره) و Student که دارای پراپرتی های Name, Age و دارای لیستی از دورسCourses می باشد.
publicclassCourse
{
privateint id;
publicint Id
{
get { return id; }
set { id = value; }
}
privatestring name;
publicstring Name
{
get { return name; }
set { name = value; }
}
privateint grade;
publicint Grade
{
get { return grade; }
set { grade = value; }
}
public Course()
{
}
public Course(int cid, string cname, int g)
{
Id = cid;
Name = cname;
Grade = g;
}
}
publicclassStudent
{
privatestring name;
publicstring Name
{
get { return name; }
set { name = value; }
}
privateint age;
publicint Age
{
get { return age; }
set { age = value; }
}
BindingList<Course> courses;
publicBindingList<Course> Courses
{
get { return courses; }
set { courses = value; }
}
public Student()
{
}
public Student(string n, int a)
{
Name = n;
Age = a;
}
}
فرمی دارید به شکل زیر:
71491
که دارای دو لیست باکس که یکی شامل لیست دانش آموزان و دیگری شامل لیست دورس مربوط به دانش آموز انتخاب شده در لیست باکس اولی می باشد و با سکرول روی لیست باکس دانش آموزان هم تکس باکس ها تغییر می کند و هم لیست دروس آن دانش آموز در لیست باکس مربوطه. ضمنا با اسکرول لیست باکس دروس درس مربوطه در تکس باکسهای مربوط به آنها نمایش داده می شود و مهمترین مسئله این است که با تغییر مقادیر تکس باکس ها بقیه کنترل ها هم بروز می شود. مثلا اگر نمره یک درس تغییر می کند ضمن اینکه این تغییر در لیست باکس دروس بصورت همزمان نمایش داده می شود معدل دانش آموز هم در لیست باکس دانش آموزان نیز بروز شود.
تنها نکته ای که باقی می مونه اینه که داده ها از قبل به صورت Hard Code در فرم قرار دارند و در فرم فقط میتوان آنها را ویرایش کرد و امکان اضافه یا حذف وجود ندارد
privatevoid Initialize()
{
Students = newBindingList<Student>();
Student stu = newStudent("Mohsen", 18);
stu.Courses = newBindingList<Course>();
stu.Courses.Add(newCourse(1, "Math", 12));
stu.Courses.Add(newCourse(2, "Physics", 15));
stu.Courses.Add(newCourse(3, "Chemistry", 16));
Students.Add(stu);
stu = newStudent("Ali", 19);
stu.Courses = newBindingList<Course>();
stu.Courses.Add(newCourse(1, "Physics", 20));
stu.Courses.Add(newCourse(2, "Math", 18));
stu.Courses.Add(newCourse(3, "Chemistry", 19));
Students.Add(stu);
stu = newStudent("Maryam", 15);
stu.Courses = newBindingList<Course>();
stu.Courses.Add(newCourse(1, "Physics", 18));
stu.Courses.Add(newCourse(2, "Math", 15));
stu.Courses.Add(newCourse(3, "Chemistry", 12));
stu.Courses.Add(newCourse(4, "Aljebra", 10));
Students.Add(stu);
}
لطفا پروژه زیر را کامل کنید و در همین تاپیک UpLoad کنید