Pra*_*bhu 5 vb.net asp.net sorting gridview
我试图找出如何排序GridView具有多个列(String,DateTime,Decimal这势必将自定义对象的泛型列表等数据类型).
MyObject.vb:
Public Property Id
Public Property Name
Public Property Date
Public Property Amount
Run Code Online (Sandbox Code Playgroud)
MyObjects.aspx.vb:
gridView.DataSource = GetMyObjects()
gridView.DataBind()
Run Code Online (Sandbox Code Playgroud)
注:GetMyObjects()返回List的MyObject
基本上,我需要能够单击网格的列标题进行排序和反向排序,并且还能够存储排序方向,ViewState以便每次单击列标题时方向都会保留.
好像我可能需要MyObject实现IComparable,但我不确定如何将它们放在一起.
任何人都可以建议一个很好的教程,或指出我正确的方向?
您需要启用排序(AllowSorting)并处理事件OnSorting.
注意:示例代码使用C#,但VB版本应该类似.
创建GridView:
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" OnSorting="GridView1_Sorting">
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
处理OnSorting:
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
GridView1.DataSource = GetObjects(e.SortDirection, e.SortExpression);
GridView1.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
GetObjects返回一个已排序的List<MyObject>.你必须在这里创建自己的排序逻辑,一种方法是使用Dynamic Linq.如果你选择那条路线,可以像这样定义GetObjects :(有更好的方法,但这足以显示理论)
private List<MyObject> GetObjects(SortDirection sd, string se)
{
// Have we generated data before?
if (SimulatedDB == null)
{
// Create a sample DB
SimulatedDB = new List<MyObject>();
var rnd = new Random();
for (int i = 0; i < 20; i++)
{
var node = new MyObject();
node.Id = i;
node.Name = String.Format("Name {0}", i);
node.CreationDate = DateTime.Now.AddDays(rnd.Next(100));
node.Amount = (rnd.Next(1000) * rnd.NextDouble());
SimulatedDB.Add(node);
}
}
// Return sorted list
if (sd == SortDirection.Ascending)
return SimulatedDB.AsQueryable<MyObject>().OrderBy<MyObject>(se).ToList();
else
return SimulatedDB.AsQueryable<MyObject>().OrderByDescending<MyObject>(se).ToList();
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
6100 次 |
| 最近记录: |