gpt4 book ai didi

c# - 如何在 GridView 中启用 IEnumerable 数据的自动排序?

转载 作者:可可西里 更新时间:2023-11-01 07:58:17 25 4
gpt4 key购买 nike

我如何启用我的 BLL 的自动排序,它返回一个列表,CustomerList:GridView 中的列表?

Customer 是我自己的强类型类,CustomerList 是一个客户列表。

我知道一种方法是在 GridView 中将 AllowSorting 属性设置为 true 并处理 OnSorting 事件并调用在我的 CustomerList 类中定义的排序方法。

但是我想要一个自动解决方案,因为我不必处理 OnSorting 事件,它应该像 GridView 处理 DataView、DataTable 和 DataSet 的自动排序一样。

是否需要在我的 CustomerList 或 Customer 类上实现一个接口(interface)来启用该功能?

alt text http://img260.imageshack.us/img260/3373/aa479347gridviewfg21enu.gif

最佳答案

好吧,我明白了。这是解决方案:

  1. 将 BLL 绑定(bind)到 ObjectDataSource。
  2. 为您的 BLL 中的 select 方法提供重载方法,以支持分页和排序。
  3. 在 ObjectDataSource 中提供 SortParameterName。这是您的 BLL 中 select 方法的字符串输入参数的名称。

有关更多信息,请参阅: http://msdn.microsoft.com/en-us/library/aa479347.aspx

这是一个例子,这只是一个演示的快速示例我不支持排序方向,或优化代码等:

namespace CodeSamples.DAL
{
public static class DAL
{
public static CustomerList GetCustomerList(string SortExpression)
{
return GetCustomerList(int.MaxValue, 0, SortExpression);
}

public static CustomerList GetCustomerList()
{
return GetCustomerList(int.MaxValue, 0,String.Empty);
}

public static CustomerList GetCustomerList(int maximumRows, int startRowIndex, string SortExpression)
{
const string query = "Select * from Customers";
CustomerList customers = new CustomerList();


SqlConnection conn = new SqlConnection("Data Source=Win2k8;Initial Catalog=NorthWind;User ID=sa;Password=XXXXX");
SqlCommand command = new SqlCommand(query, conn);
conn.Open();
SqlDataReader reader = command.ExecuteReader();

ArrayList rows = new ArrayList();

while (reader.Read())
{
object[] values = new object[reader.FieldCount];
reader.GetValues(values);
rows.Add(values);
}

conn.Close();

int currentIndex = 0;
int itemsRead = 0;
int totalRecords = rows.Count;

foreach (object[] row in rows)
{
if (currentIndex >= startRowIndex && itemsRead <= maximumRows)
{
customers.Add(new Customer { Name = row[1].ToString(), ID = row[0].ToString(), ContactName = row[2].ToString() });
itemsRead++;
}
currentIndex++;
}


CustomerList sortedCustomers = new CustomerList();

string sortBy = SortExpression;
bool isDescending = false;

if (SortExpression.ToLowerInvariant().EndsWith(" desc"))
{
sortBy = SortExpression.Substring(0, SortExpression.Length - 5);
isDescending = true;
}

var sortedList = from customer in customers
select customer;

switch (sortBy)
{
case "ID":
sortedList = isDescending ? sortedList.OrderByDescending(cust => cust.ID) : sortedList.OrderBy(cust => cust.ID);
break;

case "Name":
sortedList = isDescending ? sortedList.OrderByDescending(cust => cust.Name) : sortedList.OrderBy(cust => cust.Name);
break;

case "ContactName":
sortedList = isDescending ? sortedList.OrderByDescending(cust => cust.ContactName) : sortedList.OrderBy(cust => cust.ContactName);
break;

}

foreach (Customer x in sortedList)
{
sortedCustomers.Add(x);
}

return sortedCustomers;
}
}

public class CustomerList : List<Customer>
{

}

public class Customer
{
public Customer()
{
}

public Customer(string Name, string id)
{
this.Name = Name;
ID = id;
}
public string ID
{
get;
set;
}

public string Name
{
get;
set;
}

public string ContactName
{
get;
set;
}


}
}

在 ASPX 页面中:

  <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
AutoGenerateColumns="False" DataSourceID="ObjectDataSource1"
AllowSorting="True">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="ContactName" HeaderText="ContactName" SortExpression="ContactName" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetCustomerList" SortParameterName="SortExpression"
TypeName="CodeSamples.DAL.DAL">
</asp:ObjectDataSource>

有关更多信息,请参阅: http://msdn.microsoft.com/en-us/library/aa479347.aspx

关于c# - 如何在 GridView 中启用 IEnumerable 数据的自动排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2550010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com