在图1-14中看到第一个要管理是日志分类,也就是本节所要介绍的。它是使用ucAdmin_LogCategory.ascx用户控件来完成的,如图1-1所示是该控件的最终布局。
图1-1 管理日志分类用户控件布局
如图1-1所示,在绑定显示日志分类数据时这里使用的ASP.NET中的GridView控件,而不是Repeater控件。GridView控件又称网格视图控件,该控件可以呈现多列、完全模板化的表格,在其功能上比Repeater控件更加强大。通过使用GridView控件,用户可以显示、编辑和删除多种不同的数据源(例如数据库、XML文件和公开数据的业务对象)中的数据。
使用GridView来可以完成以下操作:
l 通过数据源控件自动绑定和显示数据
l 通过数据源控件对数据进行选择、排序、分页、编辑和删除
l 指定自定义列和样式
l 利用模板创建自定义用户界面(UI)元素
l 通过处理事件将自己的代码添加到GridView控件的功能中
GridView控件支持BoundField、ButtonField、HyperLinkField、CommandField、和TemplateField等多种绑定列类型,最常用的是BoundField和CommandField。
BoundField类型显示绑定到数据源的一个字段的列,显示的结果为纯文本形式:在绑定该列类型的数据时,需要用到与该数据有关的属性。该列类型的常用重要属性如下:
l DataField 数据源中绑定数据列的字段名称
l DataFormatString 显示列数据的格式
l HeaderText 该列的标题
l FooterText 该列的脚注部分
l ReadOnly 标识该列是否要编辑
l SortExpression 该列的排序表达式
CommandField类型显示GridView中内置各种编辑功能按钮。如“编辑”、“删除”等,默认情况下它们以LinkButton的形式表现出来。该列类型常用重要属性如下所示:
l ButtonType 设置按钮的类型
l CancleText 取消按钮的显示文本
l DeleteText 删除按钮的显示文本
l EditText 编辑按钮的显示文本
l ShowEditButton 是否显示编辑按钮
l ShowCancleButton 是否显示取消按钮
l ShowDeleteButton 是否显示删除按钮
图1-1所示布局中的添加日志分类使用了一个文本框控件、一个按钮和一个验证控件。
1.查看日志分类
查看日志分类也就是从infosort表中读取数据并绑定到GridView控件显示,这首先需要了解GridView控件的布局,其代码如下:
<asp:GridView ID="GridView1" runat="server" BackColor="White" BorderColor="#999999"
BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical"
OnRowCancelingEdit="GridView1_RowCancelingEdit"
OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing"
OnRowUpdating="GridView1_RowUpdating" ShowFooter="True"
Width="500px" AutoGenerateColumns="False" EnableViewState="False" >
<FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
<RowStyle BackColor="#EEEEEE" ForeColor="Black" />
<SelectedRowStyle BackColor="# 008A 8C " Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="Gainsboro" />
<Columns>
<asp:BoundField DataField="id" HeaderText="编号" ReadOnly="True" />
<asp:BoundField DataField="sortName" HeaderText="分类名称" />
<asp:BoundField DataField="sortdate" HeaderText="更新日期" ReadOnly="True" />
<asp:CommandField ShowEditButton="True" />
<asp:CommandField ButtonType="Image" DeleteImageUrl="~/images/a_delete.gif" ShowDeleteButton="True" />
</Columns>
</asp:GridView>
上述代码中<Columns>和</Columns>标记这间的为布局外观上显示的列,其中的第一行指定一个显示“编号”的列,列使用的数据为绑定的id列,最后一个ReadOnly属性设置该列为只读。
认识了布局后下面来编写代码,GridView控件的绑定方法与Repeater控件相同,代码如下:
protected void Page_Load(object sender, EventArgs e)
{
gbind();
}
void gbind()
{
dbconfig dbconn = new dbconfig();
GridView1.DataSource = dbconn.CreateSource("select * from infosort");
GridView1.DataBind();
dbconn.Clear();
}
这里要注意,在代码中第一次使用了数据库通用类中的CreateSource()方法。
2.修改日志类别
执行上述代码,然后在某行中单击“编辑”链接,则该行中可编辑的单元格都会以文本框的形式呈现。此时,在文本框中对数据进行修改,再单击“更新”链接保存修改,若单击“取消”链接则退出编辑状态,如图1-16所示。
图1-16 修改日志分类
GridView控件的“编辑”、“更新”和“取消”链接取决于控件的OnRowCancelingEdit、OnRowEditing和OnRowUpdating属性,我们在上面的布局代码中会发现它们。它们的属性值分别对应后台的一个方法,而且都是使用GridView的事件模型机制。
“编辑”链接对应的GridView1_RowEditing()方法代码如下:
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
gbind(); //重新绑定控件的数据源
}
代码中的EditIndex属性可以设置或获取要编辑行的索引,这里指定编辑的行为单击的所在行,使其处于编辑状态,这个属性很重要,在后面将会多次用到。
“取消”链接对应的GridView1_RowCancelingEdit()方法代码如下:
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
gbind(); //重新绑定控件的数据源
}
最重要的是“更新”链接对应的GridView1_RowUpdating()方法的代码,如下所示:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridView1.EditIndex = e.RowIndex;
//获取要更新的行
GridViewRow gvr = this.GridView1.Rows[e.RowIndex];
//获取行中新的分类名称
TextBox txt = (TextBox)gvr.Cells[1].Controls[0];
//获取更新的分类编号
string updateid = gvr.Cells[0].Text;
string strsql = "Update infosort set sortName='" + txt.Text.Trim() + "',sortDate='" + DateTime.Now.ToString() + "' where id=" + updateid;
dbconfig dbconn = new dbconfig();
dbconn.ExecuteNonQuery(strsql);
dbconn.Clear();
Response.Redirect("Admin_Index.aspx");
}
在更新infosort表中sortName字段的同时更新了sortDate为当前日期,最后再转向到系统管理首页。
3.删除日志类别
“删除”链接对应于GridView控件的OnRowDeleting属性,即GridView1_RowDeleting()方法,执行过程为获取所在行的分类编号,再执行语句并返回,如下所示:
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
GridViewRow gvr = (GridViewRow)GridView1.Controls[0].Controls[e.RowIndex + 1];
string delid = gvr.Cells[0].Text;
dbconfig dbconn = new dbconfig();
dbconn.ExecuteNonQuery("delete from infosort where id=" + delid);
dbconn.Clear();
Response.Redirect("Admin_Index.aspx");
}
4.添加日志分类
添加日志分类在图1-1布局中的最下方,只需要在文本框中输入一个名称再单击“确定”按钮来完成。代码的编写需要在“确定”按钮的单击事件中,按钮的名称为btnOK,其单击代码如下所示:
protected void btnOk_Click(object sender, EventArgs e)
{
dbconfig dbconn = new dbconfig();
string strsql="insert into infosort(sortName) values('"+txtLog.Text.Trim()+"')";
dbconn.ExecuteNonQuery(strsql);
dbconn.Clear();
Response.Redirect("Admin_Index.aspx");
}