PDA

View Full Version : سوال: مرتب کردن datagrid بایند شده به دیتاسورس Entity Framework



siolishe
جمعه 04 دی 1394, 14:10 عصر
سلام من یک گرید ویو دارم به شکل زیر:


protected void Page_Load(object sender, EventArgs e)
{

griddata();
}

private void griddata()
{
string name = Request.QueryString["name"];
string Tel = Request.QueryString["Tel"];
string Address = Request.QueryString["Address"];
string Description = Request.QueryString["Description"];
int? CaseNumber = string.IsNullOrEmpty(Request.QueryString["CaseNumber"]) ? (int?)null : Convert.ToInt16(Request.QueryString["CaseNumber"]);


dbModel db = new dbModel();
var datasource = from source in db.Files
where
(source.Name == null || source.Name.Contains(name)) &&
(source.Tel == null || source.Tel.Contains(Tel)) &&
(source.Address == null || source.Address.Contains(Address)) &&
(source.Description == null || source.Description.Contains(Description)) &&
(CaseNumber == null || source.CaseNumber == (CaseNumber))
select source;

GridView1.DataSource = datasource.ToList();
GridView1.DataBind();
DataTable dtbl = GridView1.DataSource as DataTable;
ViewState["dbl"] = dtbl;
}

و برای سورت کردن از کد زیر استفاده کردم:


protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dataTable = ViewState["dbl"] as DataTable;
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = e.SortExpression + " " + ConvertSortDirection(e.SortDirection);

GridView1.DataSource = dataView;
GridView1.DataBind();
}

}
private string ConvertSortDirection(SortDirection sortDirection)
{
string newSortDirection = String.Empty;
switch (sortDirection)
{
case SortDirection.Ascending:
newSortDirection = "ASC";
break;

case SortDirection.Descending:
newSortDirection = "DESC";
break;
}

return newSortDirection;
}
اما با زدن دکمه سورت هیچ اتفاقی نمی افته کسی میتونه راهنماییم کنه؟

davidrobert
جمعه 04 دی 1394, 14:28 عصر
دوست عزیز میخواهی مرتب کنی باید به این صورت مرتب کنی چون خود ای اف دستور سورت داره
var q = db.Tbl_bank.OrderByDescending(d => d.B_Id);
dgv1.DataSource = q.ToList();

siolishe
جمعه 04 دی 1394, 14:41 عصر
ممنون از توجهت دوست عزیز
ولی من میخوام خود کاربر با توجه به هر ستونی که خواست بتونه جدولو سورت کنه یعنی وقتی روی اسم هر ستون میزنه بصورت صعودی یا نزولی مرتب بشه

Mahmoud.Afrad
شنبه 05 دی 1394, 16:16 عصر
(به نظر من وقتی دارید از EF استفاده میکنید اصلا و ابدا نیازی به دیتاتیبل و دیتاست نیست)
پراپرتی AllowSorting از گریدویو برابر True باشه.
دو خط آخر griddata که مربوط به دیتاتیبل هست رو پاک کن.
متد Sorting رو به اینصورت بنویس (در List<File> کلاس File همان موجودیتی است که در مدل وجود داره)

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
if (GridView1.DataSource == null)
{
return;
}
List<File> tblList = GridView1.DataSource as List<File>;

string strColumnName = e.SortExpression;
Type objType = tblList.GetType().GetGenericArguments().SingleOrDe fault();

HttpCookie requestCookie = Request.Cookies["SortCookie"];
SortDirection previousSortDirection = requestCookie == null || requestCookie.Value == "Ascending" ? SortDirection.Ascending : SortDirection.Descending;

SortDirection newSortDirection;
if (previousSortDirection == SortDirection.Ascending)
{
newSortDirection = SortDirection.Descending;
tblList = tblList.OrderByDescending(x => objType.GetProperty(strColumnName).GetValue(x, null)).ToList();
}
else
{
newSortDirection = SortDirection.Ascending;
tblList = tblList.OrderBy(x => objType.GetProperty(strColumnName).GetValue(x, null)).ToList();
}
GridView1.DataSource = tblList;
GridView1.DataBind();

HttpCookie responseCookie = new HttpCookie("SortCookie") {Value = newSortDirection.ToString()};
Response.Cookies.Set(responseCookie);
}

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

siolishe
شنبه 05 دی 1394, 18:58 عصر
مرسی از پاسخ کاملتون
اما بازم مشکل پابرجاست! یعنی با زدن دکمه سورت هیچ اتفاقی نمی افته!
ظاهرا همیشه GridView1.DataSource == null رو بر میگردونه

ویرایش:
راه حل آخری کاملا بدون نقص کار میکنه فقط باید پارامترهای gridview تو pageload نوشته بشه
خیلی ممنون