<%@ 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:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"
ForeColor="#333333" GridLines="None" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging" PageSize="6" DataKeyNames="id" OnDataBound="GridView1_DataBound" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowEditing="GridView1_RowEditing">
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:TemplateField HeaderText="详情">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "Show.aspx?id="+Eval("id") %>' Text='<%# Bind("id") %>'></asp:HyperLink><!--这里的bind方法也可以用Eval方法,但Bind方法性能较好,Eval 方法是静态(只读)方法,eval()方法在运行时使用反射执行后期绑定计算,因此与标准的ASP.NET数据绑定方法bind相比,会导致性能明显下降。它一般用在绑定时需要格式化字符串的情况下。多数情况尽量少用此方法
-->
<br />
<br />
<asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl='<%#"Show.aspx?id="+Eval("id") %>' Text='<%# bind("id") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField DataNavigateUrlFields="id" DataNavigateUrlFormatString="show.aspx?id={0}"
DataTextField="id" HeaderText="详情2" />
<asp:BoundField DataField="id" HeaderText="编号" ReadOnly="True" />
<asp:BoundField DataField="title" HeaderText="主题" ReadOnly="True" />
<asp:BoundField DataField="body" HeaderText="内容" />
<asp:BoundField DataField="datetime" DataFormatString="{0:d}" HeaderText="留言时间" ReadOnly="True" />
<asp:TemplateField>
<HeaderTemplate>
回发服务器方式<asp:CheckBox ID="chkAll" runat="server" AutoPostBack="True" OnCheckedChanged="chkAll_CheckedChanged" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSingle" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<RowStyle BackColor="#EFF3FB" />
<EditRowStyle BackColor="#2461BF" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="删除" OnClick="Button1_Click" /><br />
<br />
<br />
<br />
<br />
<asp:GridView id="GridView2" runat="server" AllowPaging="True" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="id" ForeColor="#333333" GridLines="None" OnPageIndexChanging="GridView2_PageIndexChanging" OnRowCancelingEdit="GridView2_RowCancelingEdit" OnRowDeleting="GridView2_RowDeleting" OnRowEditing="GridView2_RowEditing" PageSize="6" Width="450px" OnRowDataBound="GridView2_RowDataBound">
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:BoundField DataField="title" HeaderText="主题" ReadOnly="True" />
<asp:TemplateField HeaderText="内容">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("body") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("body") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="datetime" DataFormatString="{0:d}" HeaderText="留言时间" ReadOnly="True" />
<asp:CommandField ShowEditButton="True" />
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete"
Text="删除"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<RowStyle BackColor="#E3EAEB" />
<EditRowStyle BackColor="#7C6F57" />
<SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
</div>
</form>
</body>
</html>
后台代码:<!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:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"
ForeColor="#333333" GridLines="None" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging" PageSize="6" DataKeyNames="id" OnDataBound="GridView1_DataBound" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowEditing="GridView1_RowEditing">
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:TemplateField HeaderText="详情">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "Show.aspx?id="+Eval("id") %>' Text='<%# Bind("id") %>'></asp:HyperLink><!--这里的bind方法也可以用Eval方法,但Bind方法性能较好,Eval 方法是静态(只读)方法,eval()方法在运行时使用反射执行后期绑定计算,因此与标准的ASP.NET数据绑定方法bind相比,会导致性能明显下降。它一般用在绑定时需要格式化字符串的情况下。多数情况尽量少用此方法
-->
<br />
<br />
<asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl='<%#"Show.aspx?id="+Eval("id") %>' Text='<%# bind("id") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField DataNavigateUrlFields="id" DataNavigateUrlFormatString="show.aspx?id={0}"
DataTextField="id" HeaderText="详情2" />
<asp:BoundField DataField="id" HeaderText="编号" ReadOnly="True" />
<asp:BoundField DataField="title" HeaderText="主题" ReadOnly="True" />
<asp:BoundField DataField="body" HeaderText="内容" />
<asp:BoundField DataField="datetime" DataFormatString="{0:d}" HeaderText="留言时间" ReadOnly="True" />
<asp:TemplateField>
<HeaderTemplate>
回发服务器方式<asp:CheckBox ID="chkAll" runat="server" AutoPostBack="True" OnCheckedChanged="chkAll_CheckedChanged" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSingle" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<RowStyle BackColor="#EFF3FB" />
<EditRowStyle BackColor="#2461BF" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="删除" OnClick="Button1_Click" /><br />
<br />
<br />
<br />
<br />
<asp:GridView id="GridView2" runat="server" AllowPaging="True" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="id" ForeColor="#333333" GridLines="None" OnPageIndexChanging="GridView2_PageIndexChanging" OnRowCancelingEdit="GridView2_RowCancelingEdit" OnRowDeleting="GridView2_RowDeleting" OnRowEditing="GridView2_RowEditing" PageSize="6" Width="450px" OnRowDataBound="GridView2_RowDataBound">
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:BoundField DataField="title" HeaderText="主题" ReadOnly="True" />
<asp:TemplateField HeaderText="内容">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("body") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("body") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="datetime" DataFormatString="{0:d}" HeaderText="留言时间" ReadOnly="True" />
<asp:CommandField ShowEditButton="True" />
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete"
Text="删除"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<RowStyle BackColor="#E3EAEB" />
<EditRowStyle BackColor="#7C6F57" />
<SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
</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
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
public void BindData()
{
string connstr=ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection con = new SqlConnection(connstr);
if (con.State.Equals(ConnectionState.Closed))
{
con.Open();
}
SqlCommand cmd = new SqlCommand("select * from guestbook",con);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
this.GridView1.DataSource = ds;
this.GridView1.DataBind();
this.GridView2.DataSource = ds;
this.GridView2.DataBind();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
this.BindData();
}
protected void chkAll_CheckedChanged(object sender, EventArgs e)
{
CheckBox cb=(CheckBox)(GridView1.HeaderRow.FindControl("chkAll"));
foreach (GridViewRow gr in GridView1.Rows)
{
CheckBox cb1 = (CheckBox)gr.Cells[3].FindControl("chkSingle");
if (cb.Checked)
{
cb1.Checked = true;
}
else
{
cb1.Checked = false;
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
int intCount=this.GridView1.Rows.Count;
for(int i=0;i<intCount;i++)
{
CheckBox CheckSingle = (CheckBox)(this.GridView1.Rows[i].Cells[3].FindControl("chkSingle"));
if (CheckSingle.Checked)
{
//int id = Convert.ToInt32(this.GridView1.DataKeys[i]["id"]); //方法1
int id = Convert.ToInt32(this.GridView1.Rows[i].Cells[0].Text); //方法2
string sql = "delete from guestbook where id="+id;
string connstr=ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection con = new SqlConnection(connstr);
con.Open();
SqlCommand cmd = new SqlCommand(sql,con);
cmd.ExecuteNonQuery();
}
}
this.BindData(); //这里我犯过错误,误把绑定放到上面的for循环内,结果就只能删除GridView行的第0行了
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
//this.GridView1.ShowHeader= false; //可以隐藏表头
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
BindData();
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
BindData();
}
protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView2.PageIndex = e.NewPageIndex;
BindData();
}
protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView2.EditIndex = e.NewEditIndex;
BindData();
}
protected void GridView2_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView2.EditIndex = -1;
BindData();
}
protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int intKey = Convert.ToInt32(GridView2.DataKeys[e.RowIndex]["id"]);
string upbody = ((TextBox)(GridView2.Rows[e.RowIndex].Cells[1].FindControl("TextBox1"))).Text;
string connstr = ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection con = new SqlConnection(connstr);
con.Open();
string sql = "update guestbook set body='" + upbody + "' where id=" + intKey;
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
GridView2.EditIndex = -1;
BindData();
}
protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string connstr = ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection con = new SqlConnection(connstr);
con.Open();
int intKey = Convert.ToInt32(GridView2.DataKeys[e.RowIndex]["id"]);
string sql = "delete from guestbook where id="+intKey;
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
BindData();
}
protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
//需要转换为模板列
//第一种实现方法
//LinkButton lnk = (LinkButton)e.Row.FindControl("LinkButton1");
//if (lnk != null)
//{
// lnk.Attributes.Add("onclick", "return confirm('确定吗?')");
//}
//第二种实现方法
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lbtn = (LinkButton)e.Row.Cells[4].FindControl("LinkButton1");
lbtn.Attributes.Add("onclick", "return confirm('确定吗?');");
//在对RowType进行了判断后,就可以用下面的这句实现,但有一个问题,就是点击'删除'旁边的空白也会引发这个客户端脚本的
//e.Row.Cells[4].Attributes.Add("onClick", "return confirm('你确定要删除这一条数据吗?');");
}
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onmouseover", "e=this.style.backgroundColor;this.style.backgroundColor='#ffff00'");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=e");
TableCell cell = e.Row.Cells[0]; //此方法不能应用于模板列
if (cell.Text == "靠")
{
cell.ForeColor = System.Drawing.Color.Red; //当有指定的字符内容时,此单元格为红色
}
//若用于模板列时可以这样使用
string cellText = ((Label)(e.Row.FindControl("Label1"))).Text;
if (cellText == "靠")
{
((Label)(e.Row.FindControl("Label1"))).ForeColor = System.Drawing.Color.Red; //当有指定的字符内容时,此单元格为红色
}
//此种方法 绑定列和模板列均能正确使用
string title =Convert.ToString( DataBinder.Eval(e.Row.DataItem,"body"));
if (title == "靠")
{
e.Row.Cells[1].ForeColor= System.Drawing.Color.Red;
}
}
}
}
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
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
public void BindData()
{
string connstr=ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection con = new SqlConnection(connstr);
if (con.State.Equals(ConnectionState.Closed))
{
con.Open();
}
SqlCommand cmd = new SqlCommand("select * from guestbook",con);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
this.GridView1.DataSource = ds;
this.GridView1.DataBind();
this.GridView2.DataSource = ds;
this.GridView2.DataBind();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
this.BindData();
}
protected void chkAll_CheckedChanged(object sender, EventArgs e)
{
CheckBox cb=(CheckBox)(GridView1.HeaderRow.FindControl("chkAll"));
foreach (GridViewRow gr in GridView1.Rows)
{
CheckBox cb1 = (CheckBox)gr.Cells[3].FindControl("chkSingle");
if (cb.Checked)
{
cb1.Checked = true;
}
else
{
cb1.Checked = false;
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
int intCount=this.GridView1.Rows.Count;
for(int i=0;i<intCount;i++)
{
CheckBox CheckSingle = (CheckBox)(this.GridView1.Rows[i].Cells[3].FindControl("chkSingle"));
if (CheckSingle.Checked)
{
//int id = Convert.ToInt32(this.GridView1.DataKeys[i]["id"]); //方法1
int id = Convert.ToInt32(this.GridView1.Rows[i].Cells[0].Text); //方法2
string sql = "delete from guestbook where id="+id;
string connstr=ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection con = new SqlConnection(connstr);
con.Open();
SqlCommand cmd = new SqlCommand(sql,con);
cmd.ExecuteNonQuery();
}
}
this.BindData(); //这里我犯过错误,误把绑定放到上面的for循环内,结果就只能删除GridView行的第0行了
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
//this.GridView1.ShowHeader= false; //可以隐藏表头
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
BindData();
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
BindData();
}
protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView2.PageIndex = e.NewPageIndex;
BindData();
}
protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView2.EditIndex = e.NewEditIndex;
BindData();
}
protected void GridView2_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView2.EditIndex = -1;
BindData();
}
protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int intKey = Convert.ToInt32(GridView2.DataKeys[e.RowIndex]["id"]);
string upbody = ((TextBox)(GridView2.Rows[e.RowIndex].Cells[1].FindControl("TextBox1"))).Text;
string connstr = ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection con = new SqlConnection(connstr);
con.Open();
string sql = "update guestbook set body='" + upbody + "' where id=" + intKey;
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
GridView2.EditIndex = -1;
BindData();
}
protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string connstr = ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection con = new SqlConnection(connstr);
con.Open();
int intKey = Convert.ToInt32(GridView2.DataKeys[e.RowIndex]["id"]);
string sql = "delete from guestbook where id="+intKey;
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
BindData();
}
protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
//需要转换为模板列
//第一种实现方法
//LinkButton lnk = (LinkButton)e.Row.FindControl("LinkButton1");
//if (lnk != null)
//{
// lnk.Attributes.Add("onclick", "return confirm('确定吗?')");
//}
//第二种实现方法
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lbtn = (LinkButton)e.Row.Cells[4].FindControl("LinkButton1");
lbtn.Attributes.Add("onclick", "return confirm('确定吗?');");
//在对RowType进行了判断后,就可以用下面的这句实现,但有一个问题,就是点击'删除'旁边的空白也会引发这个客户端脚本的
//e.Row.Cells[4].Attributes.Add("onClick", "return confirm('你确定要删除这一条数据吗?');");
}
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onmouseover", "e=this.style.backgroundColor;this.style.backgroundColor='#ffff00'");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=e");
TableCell cell = e.Row.Cells[0]; //此方法不能应用于模板列
if (cell.Text == "靠")
{
cell.ForeColor = System.Drawing.Color.Red; //当有指定的字符内容时,此单元格为红色
}
//若用于模板列时可以这样使用
string cellText = ((Label)(e.Row.FindControl("Label1"))).Text;
if (cellText == "靠")
{
((Label)(e.Row.FindControl("Label1"))).ForeColor = System.Drawing.Color.Red; //当有指定的字符内容时,此单元格为红色
}
//此种方法 绑定列和模板列均能正确使用
string title =Convert.ToString( DataBinder.Eval(e.Row.DataItem,"body"));
if (title == "靠")
{
e.Row.Cells[1].ForeColor= System.Drawing.Color.Red;
}
}
}
}