先来看一下这个整体的效果
主要用数据后台代码来实现功能:
第一步:设计 GridView
打开GridView的“编辑列“”,添加你要的列头,这里选择BoundField添加
其中该列字段DataField填数据库表对应的列,HeaderText为列名
可以转换成TemplateField,在页面就可以看到代码了
操作列用CommandField添加,也转换成TemplateField
选择要显示的功能,编辑,选择,取消,更新对应的字段设置为True
其中全选功能,打开编辑模板,右边选择该列HeaderTemplate列头设置一个CheckBox控件
然后再ItemTemplate也添加一个CheckBox控件,代表每个列都有该控件
(取消自动生成列 AutoGenerateColumns=false)
然后添加查询个对应控件
第二步:绑定数据
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DateShowArticle(userId); //根据用户Id查询表
}
public void DateShowArticle(int userId) //绑定到GridView中
{
List<Article> artList = new ArticlesManager().DateShowArticle(userId);
this.GridView1.DataSource = artList;
this.GridView1.DataKeyNames = new string[] { "ArticlesId" }; //捕获主键
this.GridView1.DataBind();
}
读取数据是很简单的,下面主要操作更删改查:
第三步:更删改查/分页/特效,的对应事件
//特效,给控件添加放上去就变化背景颜色的效果(在数据绑定后激发)
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow) //是否加载了数据后
{
e.Row.Attributes.Add("onmouseover", "currentColor=this.style.backgroundColor;this.style.backgroundColor='#8187fe';fontColor=this.style.color;this.style.color='#fff';");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentColor;this.style.color=fontColor;");
//给自定义删除按钮添加提示,后面用到
LinkButton delete = e.Row.FindControl("lblBtnDelete") as LinkButton;
delete.Attributes.Add("onclick", "return confirm('确定删除吗?')");
}
}
//分页(在属性中打开分页功能AllowPaging=true)
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;//显示新的索引
//调用母版页的控件的值
int userId = Convert.ToInt32((this.Master.FindControl("lblUserId") as Label).Text);
this.GridView1.DataSource = new ArticlesManager().DateShowArticle(userId); //重新绑定数据
this.GridView1.DataBind();
}
//选择,跳到修改页面
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
int userId = Convert.ToInt32((this.Master.FindControl("lblUserId") as Label).Text);
int index = e.NewSelectedIndex;
int ArticlesId = Convert.ToInt32((this.GridView1.Rows[index].FindControl("artId") as Label).Text);
Response.Redirect("AdminEdit.aspx?UserId=" + userId + "&ArticlesId=" + ArticlesId);
}
//编辑(生成Edit事件时激发,点击编辑功能)
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
int index = e.NewEditIndex; //该列的索引
int count = Convert.ToInt32((this.GridView1.Rows[index].FindControl("lbTypeId") as Label).Text);//得到原来的值
this.GridView1.EditIndex = index;//设置编辑行的索引
//重新绑定数据
int userId = Convert.ToInt32((this.Master.FindControl("lblUserId") as Label).Text);
this.GridView1.DataSource = new ArticlesManager().DateShowArticle(userId);
this.GridView1.DataBind();
//给编辑功能的复选框添加动态复选
DropDownList drilist = this.GridView1.Rows[index].FindControl("DropDownList1") as DropDownList;
drilist.DataSource=new ArticlesTypesManager().ArticlesTypeDateList();
drilist.DataTextField = "TypeName";
drilist.DataValueField = "TypeId";
drilist.DataBind();
drilist.Items.Insert(0,new ListItem("--全部--","0"));
drilist.SelectedIndex = count; //然后再自动选中该列编辑时的字段
}
//取消编辑
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
try
{
this.GridView1.EditIndex = -1; //退出编辑状态
int userId = Convert.ToInt32((this.Master.FindControl("lblUserId") as Label).Text);
this.GridView1.DataSource = new ArticlesManager().DateShowArticle(userId); //重新绑定数据
this.GridView1.DataBind();
}
catch (Exception)
{
Response.Write("<script>alert('操作失败!')</script>");
//Page.ClientScript.RegisterStartupScript(this.GetType(), "消息", "<script>alert('操作失败!')</script>");
throw;
}
}
//删除
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int index = e.RowIndex;
int ArticlesId = Convert.ToInt32((this.GridView1.Rows[index].FindControl("artId") as Label).Text); //得到第一行第一列
if (new ArticlesManager().DeleteArticeById(ArticlesId) > 0)
{
Response.Write("<script>alert('删除成功!')</script>");
}
else
{
Response.Write("<script>alert('删除失败!')</script>");
}
int userId = Convert.ToInt32((this.Master.FindControl("lblUserId") as Label).Text);
this.GridView1.DataSource = new ArticlesManager().DateShowArticle(userId); //重新绑定数据
this.GridView1.DataBind();
}
//更新
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int index= e.RowIndex;
int ArticlesId = Convert.ToInt32((this.GridView1.Rows[index].FindControl("artId") as Label).Text);
string TextTitle = (this.GridView1.Rows[index].FindControl("TextTitle") as TextBox).Text.Trim();
string TextUutline = (this.GridView1.Rows[index].FindControl("TextUutline") as TextBox).Text.Trim();
// int TextSum = Convert.ToInt32((this.GridView1.Rows[index].FindControl("TextSum") as TextBox).Text.Trim());
int selectTypeId = Convert.ToInt32((this.GridView1.Rows[index].FindControl("DropDownList1") as DropDownList).SelectedItem.Value);
Article art = new Article();
art.ArticlesId = ArticlesId;
art.Title = TextTitle;
art.Uutline = TextUutline;
// art.ClickSum = TextSum;
art.TypeId = selectTypeId;
if (new ArticlesManager().UpdateArticlesById(art))
{
Response.Write("<script>alert('更新成功!')</script>");
}
else
{
Response.Write("<script>alert('更新失败!')</script>");
}
this.GridView1.EditIndex = -1; //退出编辑状态
int userId = Convert.ToInt32((this.Master.FindControl("lblUserId") as Label).Text);
this.GridView1.DataSource = new ArticlesManager().DateShowArticle(userId); //重新绑定数据
this.GridView1.DataBind();
}
//选择,跳到修改页面
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
int userId = Convert.ToInt32((this.Master.FindControl("lblUserId") as Label).Text);
int index = e.NewSelectedIndex;
int ArticlesId = Convert.ToInt32((this.GridView1.Rows[index].FindControl("artId") as Label).Text);
Response.Redirect("AdminEdit.aspx?UserId=" + userId + "&ArticlesId=" + ArticlesId);
}
以上时GridView自带的操作,下面来操作自定义删除,全选
//自定义删除(该事件时生成事件时激发,在前面的RowDataBound事件添加删除提示)
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Del")
{
int ArticlesId = Convert.ToInt32(e.CommandArgument);
if (new ArticlesManager().DeleteArticeById(ArticlesId) > 0)
{
Response.Write("<script>alert('删除成功,已保存!')</script>");
}
else
{
Response.Write("<script>alert('删除失败!')</script>");
}
}
string SkinName = (this.Master.FindControl("lblSkinName") as Label).Text;
this.Master.BgColor = SkinName;
}
//全选删除(自定义全选,点击添加的外部按钮事件)
protected void BtnDelectAll_Click(object sender, EventArgs e)
{
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
if ((this.GridView1.Rows[i].FindControl("CheckBox2") as CheckBox).Checked == true)
{
int artId = Convert.ToInt32((this.GridView1.Rows[i].FindControl("artId") as Label).Text);
if (new ArticlesManager().DeleteArticeById(artId) > 0)
{
Response.Write("<scirpt>alert('多选删除成功!')</script>");
}
else
{
Response.Write("<script>alert('删除失败!')</script>");
}
}
}
int userId = Convert.ToInt32((this.Master.FindControl("lblUserId") as Label).Text);
DateShowArticle(userId); //刷新
}
//全选,参数AutoPostBack="True".页面不刷新
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
CheckBox chkAll = sender as CheckBox;
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
(this.GridView1.Rows[i].FindControl("CheckBox2") as CheckBox).Checked = chkAll.Checked;
}
string SkinName = (this.Master.FindControl("lblSkinName") as Label).Text;
this.Master.BgColor = SkinName;
}
以上基本的功能已经做好了,下面在外部添加查询
第四步:查询
//查询
protected void btnfind_Click(object sender, EventArgs e)
{
string title = this.TextTitle.Text.Trim();
int typeId = Convert.ToInt32(this.ddListFind.SelectedItem.Value);
this.GridView1.DataSource = new ArticlesManager().SelectLikeByTitle(typeId,title);
this.GridView1.DataBind();
}
完成,上面就是对于GridView的基本功能
来都来了,点个赞在走吧!