PDA

View Full Version : سوال: Sort نشدن datagridview بعد از استفاده از کوئری توسط لامبدا



jafarpalideh
یک شنبه 04 شهریور 1397, 12:31 عصر
با سلام
دیتاسورس گریدم رو از طریق لامبدا مقدار دهی کردم .
ولی الان که رویه ستونهاش کلیک میکنم Sort انجام نمیشه .



public List<TblPerson> GetAllPerson()
{
return db.TblPerson.OrderBy(c=>c.PersonCode).ToList();


}






void BindGrid()
{
using (UnitOfWork db = new UnitOfWork())
{
dataGridView1.AllowUserToOrderColumns = true;
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = db.PersonRepository.GetAllPerson();
}
}



چطور میتونم مشکل رو حلش کنم ؟
قبلا با ADO کار میکردم و دیتاتیبل رو به عنوان دیتاسورس گرید میزاشتم و مشکلی نبود .

alexmcse
یک شنبه 04 شهریور 1397, 12:47 عصر
متغییر db را نیو کنید
db=کلاس مورد نظر
مثال
db = new DataClasses1DataContext();
ببین مشکل حل میشود

jafarpalideh
یک شنبه 04 شهریور 1397, 13:36 عصر
نه . مشل حل نشد .
فکر کنم گیر کار اون لیست شدنه باشه که نمیدونم چه باس بکنم

mr.sirwan
یک شنبه 04 شهریور 1397, 13:41 عصر
سلام، بنده تا حالا از مرتب سازی دیتاگرید استفاده نکردم اما احتمالا باید ایونتی مربوط به کلیک روی ستون ها وجود داشته باشه که وقتی فایر شد، شما باید متناسب با ستون کلیک شده داده هارو بصورت دستی sort کنین

jafarpalideh
یک شنبه 04 شهریور 1397, 14:24 عصر
اگه امکان داره یه نمونه بزارید .
یا دوستان دیگه اگه به این مشکل بر خوردن یه راه حل بدن که جواب داده باشه

این رو پیدا کردم ولی نمیدونم چطور ازش استفاده کنم و تویه کدوم رویداد بزارمش :




foreach(DataGridViewColumn column in dataGridView1.Columns)
{


column.SortMode = DataGridViewColumnSortMode.Automatic;
}

danialafshari
یک شنبه 04 شهریور 1397, 15:08 عصر
با سلام
روی مثلت گوشه datagridview کلیک کنید و در صفحه ظاهر شده روی تمام فیلد ها خاصیت SortMode رو روی Automatic قرار بدید
موفق باشید

jafarpalideh
یک شنبه 04 شهریور 1397, 16:43 عصر
با سلام
روی مثلت گوشه datagridview کلیک کنید و در صفحه ظاهر شده روی تمام فیلد ها خاصیت SortMode رو روی Automatic قرار بدید
موفق باشید

تمام فیلدها Automatic هست ولی بازم Sort نمیشه

Mahmoud.Afrad
یک شنبه 04 شهریور 1397, 22:34 عصر
https://referencesource.microsoft.com/#System.Data.Linq/SortableBindingList.cs
لینک بالا یک کلاس هست. کافیه به پروژه اضافه و به صورت زیر استفاده کنید.
var allPerson = db.PersonRepository.GetAllPerson();
SortableBindingList<TblPerson> list = new SortableBindingList<TblPerson>(allPerson);
dataGridView1.DataSource = list;

danialafshari
سه شنبه 06 شهریور 1397, 08:22 صبح
با سلام
کتابخانه System.Linq.Dynamic رو از طریق Nuget به پروژت اضافه کن سپس در رویداد dataGridView1_ColumnHeaderMouseClick کد زیر رو بنویس

private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
dataGridView1.DataSource = db.Persons.OrderBy(dataGridView1.Columns[e.ColumnIndex].DataPropertyName).ToList();
}


اینم برای F5 :


private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode==Keys.F5)
dataGridView1.DataSource = db.Persons.OrderBy(dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].DataPropertyName).ToList();
}


موفق باشید

jafarpalideh
چهارشنبه 07 شهریور 1397, 09:05 صبح
با سلام
کتابخانه System.Linq.Dynamic رو از طریق Nuget به پروژت اضافه کن سپس در رویداد dataGridView1_ColumnHeaderMouseClick کد زیر رو بنویس

private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
dataGridView1.DataSource = db.Persons.OrderBy(dataGridView1.Columns[e.ColumnIndex].DataPropertyName).ToList();
}


اینم برای F5 :


private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode==Keys.F5)
dataGridView1.DataSource = db.Persons.OrderBy(dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].DataPropertyName).ToList();
}


موفق باشید


ممنون جواب داد .
فقط اینکه یکبار جواب میده و فقط ASC سورت میکنه.
چه بکنم که با هربار کلیک یکبار ASC سورت کنه و یکبار Desc ؟

danialafshari
چهارشنبه 07 شهریور 1397, 18:27 عصر
کلاس ضمیمه شده رو به پروژتون اضافه کنید
توسط کد زیر ازش استفاده کنید

private bool sortAscending = true;
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (sortAscending)
dataGridView1.DataSource = db.Persons.OrderByDynamic(dataGridView1.Columns[e.ColumnIndex].DataPropertyName, QueryableExtensions.Order.Asc).ToList();
else
dataGridView1.DataSource = db.Persons.OrderByDynamic(dataGridView1.Columns[e.ColumnIndex].DataPropertyName, QueryableExtensions.Order.Desc).ToList();
sortAscending = !sortAscending;
}

موفق باشید

علی فتحی
شنبه 03 آذر 1397, 14:28 عصر
بابا بجای همه اینا برید دنبال لینک چون انتی تی خیلی مشکلات دیگه هم داره