Gridview排序方法-将数字按字符串排序-如何更改数据类型
本文关键字:排序 何更改 数据类型 字符串 数字 方法 Gridview | 更新日期: 2023-09-27 18:07:35
我有一个数据表,我绑定到GridView,我想能够单击列标题排序该列。我能够通过以下方法实现此功能:
private const string ASCENDING = " ASC";
private const string DESCENDING = " DESC";
public SortDirection GridViewSortDirection
{
get
{
if (ViewState["sortDirection"] == null)
ViewState["sortDirection"] = SortDirection.Ascending;
return (SortDirection) ViewState["sortDirection"];
}
set { ViewState["sortDirection"] = value; }
}
protected void suiteReport_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression;
if (GridViewSortDirection == SortDirection.Ascending)
{
GridViewSortDirection = SortDirection.Descending;
SortGridView(sortExpression, DESCENDING);
}
else
{
GridViewSortDirection = SortDirection.Ascending;
SortGridView(sortExpression, ASCENDING);
}
}
private void SortGridView(string sortExpression,string direction)
{
DataTable dt = (DataTable)Session["QueryTable"];
DataView dv = new DataView(dt);
dv.Sort = sortExpression + direction;
suiteReport.DataSource = dv;
suiteReport.DataBind();
}
我的问题是,我所有的列排序,如果他们是字符串。这导致900这样的数字被认为比50000"大"。我意识到问题的事实是他们被排序为字符串,但我不确定如何改变这一点。
我动态创建我的列,这里是我创建边界域的地方。
foreach (string s in headers)
{
BoundField bc = new BoundField();
bc.HeaderText = s;
bc.DataField = s.Replace(" ", string.Empty);
bc.DataFormatString = "{0:C0}";
bc.ItemStyle.Width = 125;
if (s.StartsWith("S") || s.StartsWith("I"))
bc.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
else
bc.ItemStyle.HorizontalAlign = HorizontalAlign.Right;
bc.SortExpression = s.Replace(" ", string.Empty);
suiteReport.Columns.Add(bc);
}
我应该如何/在哪里改变数据类型?
任何帮助,这将是非常感激!谢谢你
可以在将数据源绑定到网格视图之前对其进行排序。如何构建网格视图字段不应该有任何区别。确保来自viewstate的'dt' DataTable中的列'类型是正确的(并非所有列都是字符串类型),并使用linq:
private void SortGridView(string sortExpression, string direction)
{
DataTable dt = (DataTable)Session["QueryTable"];
if (direction == ASCENDING)
{
suiteReport.DataSource = dt.AsEnumerable().OrderBy(x => x[sortExpression]);
}
else
{
suiteReport.DataSource = dt.AsEnumerable().OrderByDescending(x => x[sortExpression]);
}
suiteReport.DataBind();
}
这里假设sortExpression与dt DataTable中的特定列名相同。