数媒管理团队 付姝娴
ASP.NET开发中,显示表格数据是一项经常要做的任务,ASP.NET也提供了许多工具来在网格中显示表格数据,例如GridView控件。GridView控件有称网格视图控件,该控件可以呈现多列、完全模板化的表格,其功能比datalist控件更强大。
通过使用GridView控件,用户可以通过数据源自动绑定和显示数据,并对数据进行选择、编辑和删除等操作。其中这些操作也可使用控件的自带的处理方式,也可用户自定义的方法。
使用控件自动处理方式
新建一个ASP.NET web 应用程序,在其Default.aspx界面中添加一个GridView控件,其ID为GridView1,在Default.aspx.cs中绑定数据源:
protected void Page_Load(object sender, EventArgs e)
{
this.GridView1.DataSource = SelectAll();
this.GridView1.DataBind();
}
public DataTable SelectAll()
{
SqlConnection con = db.creatcon();
SqlDataAdapter sda = new SqlDataAdapter("select * from [Users]", con);
DataSet ds = new DataSet();
sda.Fill(ds, "Users");
return ds.Tables["Users"];
}
在其属性面板里设置
AutoGenerateColumns="False" AutoGenerateDeleteButton="True"
AutoGenerateEditButton="True"
并添加编辑、删除响应函数:
OnRowCancelingEdit="GridView1_RowCancelingEdit1" OnRowEditing="GridView1_RowEditing1"
OnRowUpdating="GridView1_RowUpdating1"
DataKeyNames="ID"
OnRowDeleted="GridView1_RowDeleted"
OnRowDeleting="GridView1_RowDeleting"
添加显示列:
<Columns>
<asp:BoundField DataField="ID" HeaderText="用户编号" ReadOnly=True />
<asp:BoundField DataField="Name" HeaderText="姓名" />
<asp:BoundField DataField="Grade" HeaderText="班级" />
</Columns>
注意:DataField中的名称应该和连接的数据库中字段相同
在Default.aspx.cs中实现响应函数:
protected void GridView1_RowCancelingEdit1(object sender, GridViewCancelEditEventArgs e)
{
this.GridView1.EditIndex = -1;
this.GridView1.DataSource = SelectAll();
this.GridView1.DataBind();
}
protected void GridView1_RowEditing1(object sender, GridViewEditEventArgs e)
{
this.GridView1.EditIndex = e.NewEditIndex;
this.GridView1.DataSource = SelectAll();
this.GridView1.DataBind();
}
protected void GridView1_RowUpdating1(object sender, GridViewUpdateEventArgs e)
{
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int ID = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value.ToString());
//DeleteUser(ID); 删除用户操作
GridView1.DataSource = SelectAll();
GridView1.DataBind();
}
但自动编辑、删除界面单一,当不满足用户需求时,需要用户自定义操作:
在其属性面板里设置:
AutoGenerateColumns="False" AutoGenerateDeleteButton=" False "
AutoGenerateEditButton=" False "
添加列:
<Columns>
<asp:BoundField DataField="ID" HeaderText="用户编号" ReadOnly=True />
<asp:BoundField DataField="Name" HeaderText="姓名" />
<asp:BoundField DataField="Grade" HeaderText="班级" />
</Columns>
添加相应操作:
<asp:HyperLinkField DataNavigateUrlFields="ID" HeaderText="修改"
Text="修改" DataNavigateUrlFormatString="EditNews.aspx? ID={0}" />
<asp:TemplateField HeaderText="删除" ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="Del" OnClientClick="return confirm('您确定要删除吗?');">删除</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
此时在响应事件中添加RowCommand函数:GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
点击GridView行中的删除命令 弹出询问对话框,点击确定,触发该事件:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Del")
{
int FID = Convert.ToInt32(e.CommandArgument);
//相应操作
}
}
点击GridView行中的编辑命令,跳至指定界面EditNews.aspx:
获取传递的值:int FID =(Request.QueryString["ID"]).ToString();
即可完成一系列的操作。