ASP.. NET GridView排序实现事件处理
本文关键字:实现 事件处理 排序 GridView NET ASP | 更新日期: 2023-09-27 18:19:12
谁能分享一下如何实际实现gridview排序和处理事件,如果:
- 手动绑定数据
- Gridview是使用模板字段构建的,该字段仅从后面的代码中抽取(而不是从标记中抽取)
我只从代码后面构建我的gridview,因此我不能使用默认的方法或解决方案。
谢谢
这可能就是你要找的:
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
listBindByName(); //this would be your procedure to look for the data you want
DataSet dsSortTable = GridView1.DataSource as DataSet;
DataTable dtSortTable = dsSortTable.Tables[0];
if (dtSortTable != null)
{
DataView dvSortedView = new DataView(dtSortTable);
dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString();
ViewState["sortExpression"] = e.SortExpression;
GridView1.DataSource = dvSortedView;
GridView1.DataBind();
}
UpdatePanel1.Update();
}
private string getSortDirectionString()
{
if (ViewState["sortDirection"] == null)
{
ViewState["sortDirection"] = "ASC";
}
else
{
if (ViewState["sortDirection"].ToString() == "ASC")
{
ViewState["sortDirection"] = "DESC";
return ViewState["sortDirection"].ToString();
}
if (ViewState["sortDirection"].ToString() == "DESC")
{
ViewState["sortDirection"] = "ASC";
return ViewState["sortDirection"].ToString();
}
}
return ViewState["sortDirection"].ToString();
}
这是TemplateField的一个例子:
<asp:TemplateField HeaderText="Description" SortExpression="description">
<ItemTemplate>
<asp:Label Visible="true" runat="server" ID="descriptionLabel" Text='<%# bind("description") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEditDescription" Width="100px" runat="server" Text='<%#Bind("description") %>' />
</EditItemTemplate>
</asp:TemplateField>
通过添加SortExpression属性,GridView头将变得可点击。确保排序表达式属性是要通过sql查询绑定的字段的名称。
/* Best to use the shortened routine below - which can be further shortened */
private string GetSortDirectionString()
{
if (ViewState["sortDirection"] == null) ViewState["sortDirection"] = "ASC";
var currDir = ViewState["sortDirection"].ToString().ToUpper();
switch (currDir)
{
case "ASC": ViewState["sortDirection"] = "DESC"; break;
case "DESC": ViewState["sortDirection"] = "ASC"; break;
}
return ViewState["sortDirection"].ToString();
}
asp .net中的网格视图排序
第一步编辑源代码,添加allow排序 true,并在排序
时通过启动事件<asp:GridView ID="GridView1" AllowSorting="true" OnSorting="GridView1_Sorting" runat="server">
</asp:GridView>
第二步在后面的代码页..我们需要处理这个事件"GridView1_Sorting"和数据表绑定。在页面加载时,我们将绑定数据表和gridview
dt = Class1.getDataSet().Tables[0]; // here dt is the datatable object declared Globally.
GridView1.DataSource = dt;
GridView1.DataBind();
所以现在如果我们运行我们的代码,网格视图将是可见的,但没有排序。
第三步
接下来我们需要处理Gridview排序事件。首先我们需要声明一个静态字符串SortDirection。
protected void SetSortDirection(string sortDirection)
{
if (sortDirection == "ASC")
{
_sortDirection = "DESC";
}
else
{
_sortDirection = "ASC";
}
}
所以sortDirection是一个静态字符串…我们用这个函数在升序和降序之间切换…步骤4
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
SetSortDirection(SortDirection);
if (dt != null)
{
//Sort the data.
dt.DefaultView.Sort = e.SortExpression + " " + _sortDirection;
GridView1.DataSource = dt;
GridView1.DataBind();
SortDireaction = _sortDirection;
}
}
所以我们已经完成了排序....sortExpression就是列名