最近做一个东西用到DetailsView,所以看了一下资料,用了一下,以前也没用过这个控件,不过与GridView结合起来使用还不错的,因为GridView自带了增、删、改功能,但没有增加,DetailsView的结合就很好的粥补了这一缺点,也可以使GridView中查看单条数据记录的详细信息变是更加方便。
HTML中的代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DetailsView ID="dtvUsers" runat="server" AutoGenerateDeleteButton="True" AutoGenerateEditButton="True"
AutoGenerateInsertButton="True" BackColor="White" BorderColor="#E7E7FF" BorderStyle="None"
BorderWidth="1px" CellPadding="3" GridLines="Horizontal" Height="146px" OnItemCommand="dtvUsers_ItemCommand"
Width="231px" AllowPaging="True" DataKeyNames="userid" OnItemDeleting="dtvUsers_ItemDeleting" OnItemInserting="dtvUsers_ItemInserting" OnModeChanging="dtvUsers_ModeChanging" OnPageIndexChanging="dtvUsers_PageIndexChanging">
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<EditRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
<RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
<AlternatingRowStyle BackColor="#F7F7F7" />
</asp:DetailsView>
</div>
</form>
</body>
</html>
代码隐藏文件中的实现代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
SqlConnection conn = new SqlConnection("Server=.;uid=sa;pwd=sa;database=Test");
SqlDataAdapter da;
SqlCommand cmd;
protected void Page_Load(object sender, EventArgs e)
{
//绑定用户信息
if (!IsPostBack)
{
BindUsers();
}
}
public void BindUsers()
{
DataTable dt = new DataTable();
da = new SqlDataAdapter("select * from users",conn);
da.Fill(dt);
dtvUsers.DataSource = dt;
dtvUsers.DataBind();
}
protected void dtvUsers_ItemCommand(object sender, DetailsViewCommandEventArgs e)
{
if (e.CommandName.ToLower() == "new")
{
dtvUsers.ChangeMode(DetailsViewMode.Insert);
BindUsers();
}
else if (e.CommandName.ToLower() == "insert")
{
string name = ((TextBox)this.dtvUsers.Rows[0].Cells[1].Controls[0]).Text;
string sex = ((TextBox)(dtvUsers.Rows[1].Cells[1].Controls[0])).Text;
string address = ((TextBox)(dtvUsers.Rows[2].Cells[1].Controls[0])).Text;
if (name != null && sex != null && address != null)
{
cmd = new SqlCommand("insert into users(name,sex,address) values('" + name + "','" + sex + "','" + address + "')", conn);
try
{
conn.Open();
cmd.ExecuteNonQuery();
Page.RegisterStartupScript("alert", "<script>alert('添加成功!')</script>");
BindUsers();
}
catch (Exception ce)
{
Response.Write(ce.ToString());
}
finally
{
conn.Close();
}
}
else
{
Page.RegisterStartupScript("alert", "<script>alert('输入不能为空!')</script>");
}
}
else if (e.CommandName.ToLower() == "cancel")
{
dtvUsers.ChangeMode(DetailsViewMode.ReadOnly);
BindUsers();
}
else if (e.CommandName.ToLower() == "edit")
{
dtvUsers.ChangeMode(DetailsViewMode.Edit);
BindUsers();
}
else if (e.CommandName.ToLower() == "delete")
{
int id = int.Parse(dtvUsers.SelectedValue.ToString());
cmd = new SqlCommand(string.Format("delete from users where userid = {0}", id), conn);
try
{
conn.Open();
cmd.ExecuteNonQuery();
Page.RegisterStartupScript("alert", "<script>alert('删除成功')</script>");
BindUsers();
}
catch (Exception ce)
{
Response.Write(ce.ToString());
}
finally
{
conn.Close();
}
}
}
protected void dtvUsers_ModeChanging(object sender, DetailsViewModeEventArgs e)
{
}
protected void dtvUsers_ItemDeleting(object sender, DetailsViewDeleteEventArgs e)
{
}
protected void dtvUsers_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
dtvUsers.ChangeMode(DetailsViewMode.ReadOnly);
BindUsers();
}
protected void dtvUsers_PageIndexChanging(object sender, DetailsViewPageEventArgs e)
{
dtvUsers.PageIndex = e.NewPageIndex;
BindUsers();
}
}
http://poul33.blog.sohu.com/53859343.html
If you want to get the value in ReadOnly mode, it should be: DetailsView1.Rows[1].Cells[1].Text //"bpac" field data
If it is in edit mode, it should be: ((TextBox)DetailsView1.Rows[1].Cells[1].Controls[0]).Text //value in TextBox for "bpac" field
The Cells[0] is the headertext, Cells[1] is the bound value.