不做不知道,一做全是错。
不用gridView控件已经有2年了。脑海中依稀只是记得自能绑定数据源后能实现自动分页 排序等功能。
这次自己做的这个项目看来眼高手低的问题体现出了。
--------------------------------
实现功能:用gridView显示所有注册的用户信息
数据库表Users中有多列,此处只是想显示UserId,User_Name,Role_Name三列。
此处对于gridview的绑定自己全部用自定义模板实现代码绑定。于是绑定后认为会自动实现排序等功能结果不能
上网查找资料有这么句话提醒了我:【gridview如果使用sqldatasource绑定数据集的话分页只需将gridview 属性设置为 AllowSorting="True" 即可,但是如果采用其它数据源绑定属性 AutoGenerateColumns 如果设置为false 那么上面的排序方法则行不通。必须自定义排序。】
于是只能自己写代码了。
-----------------自定义排序事件------------------------
具体如下:Load事件
protected void Page_Load(object sender, EventArgs e)
{
user_bll = new User_Bll();
if (!IsPostBack)
{
ViewState["SortOrder"] = "User_Id";
ViewState["OrderDire"] = "DESC";
BindUsersData();
}
}
绑定数据源方法:
private void BindUsersData()
{
string sort = (string)ViewState["SortOrder"] + " " + ViewState["OrderDire"];
DataView dv = user_bll.GetAllUsers().DefaultView;
dv.Sort = sort;
this.GridView1.DataSource = dv;
this.GridView1.DataBind();
}
排序事件:
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string sPage = e.SortExpression;
if (ViewState["SortOrder"].ToString() == sPage)
{
if (ViewState["OrderDire"].ToString() == "DESC")
ViewState["OrderDire"] = "ASC";
else
ViewState["OrderDire"] = "DESC";
}
else
{
ViewState["SortOrder"] = e.SortExpression;
}
BindUsersData();
}
--------------自定义排序事件---------------------------------------------
--------------自定义分页事件-----------------------------------------------
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
this.Label1.Text = (e.NewPageIndex + 1).ToString();
BindUsersData();
}
--------------自定义分页事件-----------------------------------------------
--------------自定义删除事件-----------------------------------------------
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
ImageButton deletBtn = (ImageButton)e.Row.FindControl("deleteBtn");
if (deletBtn != null)
{
deletBtn.Attributes.Add("onclick","return confirm('Are you sue to Delete?');");
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "delete")
{
string deleteUserId = e.CommandArgument.ToString();
user_bll.deleteUser(deleteUserId);
BindUsersData();
}
}
前台:
<asp:TemplateField HeaderText ="操作">
<ItemTemplate>
<a href='EditUser.apsx?UserId=<%#DataBinder.Eval(Container.DataItem,"User_Id")%>'> 修改</a>
<asp:ImageButton id="deleteBtn" AlternateText="删除" runat ="server" CommandName ="delete" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"User_Id") %>'/>
</ItemTemplate>
</asp:TemplateField>
--------------自定义删除事件-----------------------------------------------