Сортировка выражения RowDataBound Fill Data внутри grid-view, у меня есть ниже gridview:
<asp:GridView ID="gv_lastlogindetails" runat="server" DataKeyNames="DistrictId,UserName" BorderColor="White" OnRowDataBound="gv_lastlogindetails_RowDataBound"
AutoGenerateColumns="false" CssClass="table table-bordered alert-master" AllowSorting="true" OnSorting="gv_lastlogindetails_Sorting">
<Columns>
<asp:TemplateField HeaderText="Role Name" SortExpression="RoleName" >
<ItemTemplate>
<asp:Label ID="lbl_RoleName" runat="server" Text='<%# Eval("RoleName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="District" SortExpression="District" >
<ItemTemplate>
<asp:Label ID="lbl_District" runat="server" Text='<%# Eval("District") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Inspection Body Name" SortExpression="FullName" >
<ItemTemplate>
<asp:Label ID="lbl_FullName" runat="server" Text='<%# Eval("FullName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Email Id" SortExpression="EmailId" >
<ItemTemplate>
<asp:Label ID="lbl_EmailId" runat="server" Text='<%# Eval("EmailId") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Mobile" SortExpression="Mobile" >
<ItemTemplate>
<asp:Label ID="lbl_Mobile" runat="server" Text='<%# Eval("Mobile") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="No of Times Visited" >
<ItemTemplate>
<asp:Label ID="lbl_NofTimesVisited" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last Login Time" ItemStyle-Width="12%">
<ItemTemplate>
<asp:Label ID="lbl_LastLoginTime" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last Login SystemIp">
<ItemTemplate>
<asp:Label ID="lbl_LastLoginSystemIp" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="No of days from last login">
<ItemTemplate>
<asp:Label ID="lbl_Noofdaysfromlastlogin" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>No Records</EmptyDataTemplate>
</asp:GridView>
Ниже приведен мой метод сортировки
protected void gv_lastlogindetails_Sorting(object sender, GridViewSortEventArgs e)
{
string sortingDirection = string.Empty;
//Assigning sort condition
if (direction == SortDirection.Ascending)
{
direction = SortDirection.Descending;
sortingDirection = "Desc";
sortImage.ImageUrl = "img/view_sort_descending.png";
//var span = new HtmlGenericControl("span");
//span.Attributes["class"] = "fa fa-sort-alpha-desc";
//sortImage.Controls.Add(span);
}
else
{
direction = SortDirection.Ascending;
sortingDirection = "Asc";
sortImage.ImageUrl = "img/view_sort_ascending.png";
//var span = new HtmlGenericControl("span");
//span.Attributes["class"] = "fa fa-sort-alpha-asc";
//sortImage.Controls.Add(span);
}
FillGrid();
DataTable dtSortTable = gv_lastlogindetails.DataSource as DataTable; //get gridview datatable
if (dtSortTable != null)
{
DataView sortedView = new DataView(dtSortTable);
sortedView.Sort = e.SortExpression + " " + sortingDirection;//sort using the direction assigned previously
Session["SortedView"] = sortedView;
gv_lastlogindetails.DataSource = sortedView;
gv_lastlogindetails.DataBind();
int columnIndex = 0;
foreach (DataControlFieldHeaderCell headerCell in gv_lastlogindetails.HeaderRow.Cells)
{
if (headerCell.ContainingField.SortExpression == e.SortExpression)
{
columnIndex = gv_lastlogindetails.HeaderRow.Cells.GetCellIndex(headerCell);
}
}
gv_lastlogindetails.HeaderRow.Cells[columnIndex].Controls.Add(sortImage);//setting sort Image in the header row
}
}
Ниже приведено заполнение моего поля строки с четырьмя строками Нет Количество посещений, время последнего входа в систему, время последнего входа в систему и число дней. Я могу отсортировать поле «Первый шаблон 4», так как оно непосредственно заполняет последние четыре, и не может выполнить сортировку, поскольку оно связано с полем со строкой данных.
protected void gv_lastlogindetails_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (!string.IsNullOrEmpty(Session["Username"] as string) && !string.IsNullOrEmpty(Session["DistrictId"] as string))
{
string defaultdate = "01/01/1900";
bo.Dateused = DateTime.ParseExact(defaultdate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
bo.Dateused1 = DateTime.ParseExact(defaultdate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
if (Session["RoleId"].ToString() == "2")/
{
if (ddl_District.SelectedValue.ToString() == "0")
{
bo.Num1 = 0;
}
else
{
bo.Num1 = int.Parse(ddl_District.SelectedValue.ToString());
}
}
else
{
bo.Num1 = int.Parse(Session["DistrictId"].ToString());//districtId //OTHER ROLES
}
bo.Num2 = 2;//Paravalue
bo.Num3 = 0;//CCId
if (Session["RoleId"].ToString() == "2")/
{
bo.Para1 = gv_lastlogindetails.DataKeys[e.Row.RowIndex].Values[1].ToString();//username
}
else
{
bo.Para1 = Session["Username"].ToString();//UserName other roles
}
DataTable dt = bl.Get_MisReports(bo);
if (dt.Rows.Count > 0)
{
((Label)e.Row.FindControl("lbl_NofTimesVisited")).Text = dt.Rows[0]["NofTimesVisited"].ToString();
((Label)e.Row.FindControl("lbl_LastLoginTime")).Text = dt.Rows[0]["LastLoginTime"].ToString();
((Label)e.Row.FindControl("lbl_LastLoginSystemIp")).Text = dt.Rows[0]["LastLoginSystemIp"].ToString();
((Label)e.Row.FindControl("lbl_Noofdaysfromlastlogin")).Text = dt.Rows[0]["Noofdaysfromlastlogin"].ToString();
}
else
{
((Label)e.Row.FindControl("lbl_NofTimesVisited")).Text = "0";
((Label)e.Row.FindControl("lbl_LastLoginTime")).Text = "0";
((Label)e.Row.FindControl("lbl_LastLoginSystemIp")).Text = "0";
((Label)e.Row.FindControl("lbl_Noofdaysfromlastlogin")).Text = "0";
}
}
else
{
Response.Redirect("sessionexpired.aspx");
Session.Clear();
Session.Abandon();
}
}
Ниже я заполняю gridview
protected void FillGrid()
{
if (!string.IsNullOrEmpty(Session["Username"] as string) && !string.IsNullOrEmpty(Session["DistrictId"] as string))
{
string defaultdate = "01/01/1900";
bo.Dateused = DateTime.ParseExact(defaultdate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
bo.Dateused1 = DateTime.ParseExact(defaultdate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
if (Session["RoleId"].ToString() == "2")
{
if (ddl_District.SelectedValue.ToString() == "0")
{
bo.Num1 = 0;
}
else
{
bo.Num1 =int.Parse(ddl_District.SelectedValue.ToString());
}
}
else
{
bo.Num1 = int.Parse(Session["DistrictId"].ToString());//
}
bo.Num2 = 1;//Paravalue
bo.Para1 = Session["Username"].ToString();//UserName
bo.Num3 = 0;//CCId
DataTable dt = bl.Get_MisReports(bo);
gv_lastlogindetails.DataSource = dt;
gv_lastlogindetails.DataBind();
if (dt.Rows.Count > 0)
{
}
else
{
DataTable dtempty = new DataTable();
gv_lastlogindetails.DataSource = dtempty;
gv_lastlogindetails.DataBind();
if (Session["RoleId"].ToString() == "2")//IF SIC
{
pnl_district.Attributes.CssStyle.Add("display", "block");
}
else
{
pnl_district.Attributes.CssStyle.Add("display", "none");
}
}
}
else
{
Response.Redirect("sessionexpired.aspx");
Session.Clear();
Session.Abandon();
}
}
Мой вопрос: я хочу оставить SortExpression
как первые четыре и такие же, как последние четыре поля шаблона. Первые четыре сортировки работают нормально, но я хочу добавить последние четыре сортировки выражение, которое заполняется из поля, связанного со строкой строки.