مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

Hamidnch

عضویت از 1392/08/12

استفاده از html5 kendo grid همراه با Cascading Dropdownlist

  • شنبه 5 دی 1394
  • 12:47
تشکر میکنم

سلام.خسته نباشید.دوستان من از کندو گرید تو پروژه mvc ام استفاده کردم،

من چند تا جدول برای کشور،استان و شهرستان دارم که برای استان،کدکشور به عنوان foreignkey هست و برای شهرستان هم کد استان به عنوان کلید خارجی هست.

این یعنی اینکه وقتی یه جدول دیگه ای با فیلدهای کشور،استان و شهرستان و ...

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

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

اما تصور کنین جدول آخری رو بخوایم با کندو نشون بدیم و با popup اون بخوایم عمل اضافه یا ویرایش رو نیز انجام دهیم.

طبیعتا به ازای کشور و استان و شهرستان می بایست dropdownlist داخل kendo grid بایند کرد،من به ازای هرکدام از فیلدها (یعنی کشور و استان و شهرستان) یه Datasource تشکیل دادم که اطلاعات اون جدول رو برمی گردونه تا درنهایت تو ردیف مربوطه تو kendo grid با استفاده از خاصیت template مثلا کد کشور رو به نام اون تبدیل کنه و نشون بده.این هم مسئله ای نیست.اما مشکل اونجاست وقتی از لیستهای آبشاری استفاده میشه،که البته تو بایند کردن اونها هم مشکل نیست و اطلاعات بدرستی بیند میشن.منظور اینه که بعد از انتخاب کشور،استانها هم بر اساس انتخاب کشور فیلتر میشن.

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

 

اگه بخوام سوالم رو بصورت کلی ارائه کنم اینه که چطور می تونم یه جدول رو که توش کلیدهای خارجی ذخیره میشن رو با ارتباط به جداول مربوطه،نام اون رو در جدول کندو نشون بدم.

باتشکر و سپاس hamidnch2007@gmail.com

پاسخ های این پرسش

تعداد پاسخ ها : 6 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • شنبه 5 دی 1394
  • 13:26

باید در Selct مهسف اصلی از includ استفاده کنید و جداول مرتبط را وصل کنید

کاربر سایت

Hamidnch

عضویت از 1392/08/12

  • شنبه 5 دی 1394
  • 14:32

ممنون از جواب سریعتون.

متد get من در web api اینگونه است:

        public DataSourceResult Get(HttpRequestMessage requestMessage)
        {
            var request = JsonConvert.DeserializeObject<DataSourceRequest>(
                requestMessage.RequestUri.ParseQueryString().GetKey(0)
                );

            var student = _studentService.GetByUserId(User.Identity.GetUserId<long>());
            if (student == null) return null;
            var stdId = student.Id;
            var groups = _studentAddressService.LoadAll().Where(s => s.Studentode.Equals(stdId));

            return groups.AsQueryable()
                .ToDataSourceResult(request.Take, request.Skip, request.Sort, request.Filter);
        }

و متد LoadAll در لایه سرویس هم بدین شکل:

    public class StudentAddressService : IStudentAddressService
    {
        private readonly IUnitOfWork _unitOfWork;
        public IDbSet<StudentAddress> StudentAddresses { get; set; }
        readonly StudentService _studentService;

        public StudentAddressService(IUnitOfWork unitOfWork,StudentService studentService)
        {
            _unitOfWork = unitOfWork;
            _studentService = studentService;
            StudentAddresses = _unitOfWork.Set<StudentAddress>();
        }

        public IEnumerable<StudentAddress> LoadAll()
        {
            try
            {
                return StudentAddresses.ToList();
            }
            catch (Exception exception)
            {
                throw exception.InnerException.InnerException;
            }
        }

چطور میتونم از include استفاده کنم.خیلی ممنون و سپاس.

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • شنبه 5 دی 1394
  • 16:50

در قسمت کوئری که اطلاعات رو Load میکنید باید برای رابطه ها از includ استفاده کنید

public ActionResult Index()
{
    var courses = db.Courses.Include(c => c.Department);
    return View(courses.ToList());
}

 

کاربر سایت

Hamidnch

عضویت از 1392/08/12

  • شنبه 5 دی 1394
  • 21:00

میدونی خیلی گلی.کوتاه مختصر اما جانانه مفید و کارساز.

مرسی مرسی مرسی....................................

کاربر سایت

Hamidnch

عضویت از 1392/08/12

  • یکشنبه 13 دی 1394
  • 09:12

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

پیرو سوالم ،

1.خواستم عرض کنم که من بدون استفاده از Include و با استفاده از select new ... هم جواب گرفتم.

                return Students.Select(x => new studentViewModel
                {
                    Id = x.Id,
                    studentAddress = x.StudentAddress.Title,              
                }).
                    ToList();
StudentAddress یه کلاس دیگه است که بصورت Navigation Property به کلاس Student لینک شده است.

آیا این روش ایرادی داره،یا نه به صورت درونی داره از Include استفاده میشه!؟

2. یه مورد دیگه هم تو استفاده از Kendo Grid داشتم که هرچی سرچ کردم جوابی براش پیدا نکردم.

وقتی اطلاعات رو به صورت Json از سرور می خونم و میریزم توی Kendodropdownlist. عمل فیلتر کردنش کار نمی کنه:

            $("#AddressCode").kendoDropDownList({
                optionLabel: "انتخاب کنید",
                dataTextField: "Text",
                dataValueField: "Value",
                cascadeFrom: "StudentCode",
                dataSource: AddressDatasource,
                filter: "contains"
            }).data("kendoDropDownList");

اطلاعات خوب لود میشه و هیچ مشکلی ندارم به جز اینکه فقط عمل فیلتر بعد از تایپ بخشی از آیتم موردنظر انجام نمیشه.

یه عکس از یه نمونه برای فیلتر استانها رو در ادامه میزارم لطفا ملاحظه کنین:

این اطلاعات استانها براساس کشور انتخابی توسط آژاکس از سرور بصورت جیسون برگردونده شده،اما عمل فیلترش کار نمیکنه!

این مورد دومی خیلی خیلی کارم رو لنگ کرده و هیچ راهی براش ندارم.اگه راهی وجود داره،ممکنه راهنمایی بفرمایید.

باتشکر و سپاس.

کاربر سایت

Hamidnch

عضویت از 1392/08/12

  • دوشنبه 14 دی 1394
  • 14:16

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

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)