gridview 绑定列详解

后台代码:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.IO;
using System.Data.SqlClient;
using System.Data;

public partial class Admin_NewsAdmin : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Bind();
btnDelete.Attributes.Add("onclick", "return confirm('真的要删除吗?')");//为删除按钮添加属性,提示是否删除

}

}

//数据绑定函数
public void Bind()
{
string conStr = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;
SqlConnection conn = new SqlConnection(conStr);
string sql = "select *from T_NewsInformation order by NewsDate desc";
SqlDataAdapter da = new SqlDataAdapter(sql, conn); ;
DataSet ds = new DataSet();
da.Fill(ds, "news");
GridView1.DataSource = ds.Tables["news"].DefaultView;
GridView1.DataKeyNames = new String[] { "NewsID" };
GridView1.DataBind();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex; //新建页码索引
Bind(); //绑定数据
}

protected void cbChoosed_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i < GridView1.Rows.Count; i++) //从GridView控件首行到末行
{

CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
//定义CheckBox控件cbox对应于该行的CheckBox1控件
if (cbChoosed.Checked == true) //如果全选复选框选中
{
cbox.Checked = true; //将CheckBox控件设置为选中,即该行CheckBox控件为选中状态
}
else
{
cbox.Checked = false; //取消选择
}
}
}

//删除按钮事件
protected void btnDelete_Click(object sender, EventArgs e)
{
#region

//连接数据库,定义命令对象
string conStr = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;
SqlConnection conn = new SqlConnection(conStr);
conn.Open();
SqlCommand cmd;
//从头到尾逐一处理记录
for (int i = 0; i < GridView1.Rows.Count; i++)
{
//获取该行复选框
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (cbox.Checked == true) //如果被选中则删除记录
{
//先定义命令查询该记录对应的附件与图片
cmd = conn.CreateCommand();
cmd.CommandText = "select * from T_NewsInformation where NewsID=@NewsID";
cmd.Parameters.Add("@NewsID", SqlDbType.Int).Value = GridView1.DataKeys[i].Value;
SqlDataReader reader = cmd.ExecuteReader();
//定义变量记录附件与图片
String NewsFile = "";
String NewsPhoto = "";
if (reader.Read())
{
NewsFile = reader["NewsFile"].ToString(); //为附件变量赋值
NewsPhoto = reader["NewsPhoto"].ToString(); //为图片变量赋值
}
if (NewsFile != "") //如果附件变量不为空,则存在附件
{
String savepath = Server.MapPath("~/upfile/") + NewsFile; //拼出存储路径
File.Delete(savepath); //删除附件
}
if (NewsPhoto != "") //如果图片变量不为空,则存在图片
{
String savepath2 = Server.MapPath("~/upimage/")+ NewsPhoto;//拼出存储路径
File.Delete(savepath2);//删除图片
}
reader.Close();

//定义新命令删除记录
cmd = conn.CreateCommand();
cmd.CommandText = "delete from T_NewsInformation where NewsId=@NewsID";
cmd.Parameters.Add("@NewsID", SqlDbType.Int).Value = GridView1.DataKeys[i].Value;
cmd.ExecuteNonQuery();
}
}
conn.Close();
Bind(); //重新绑定数据
#endregion
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex; //新建编辑索引
Bind(); //绑定数据
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1; //设置编辑索引为-1,即取消编辑
Bind(); //绑定数据
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{

//连接数据库,定义命令对象
string conStr = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;
SqlConnection conn = new SqlConnection(conStr);
conn.Open();
//定义TextBox控件对应该行TextBox控件
TextBox TBTitle = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1"); //TextBox1是标题模版列的控件
TextBox TBAuthor = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox2");//TextBox2是发布人模版列的控件
TextBox TBNewsDate = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox3");//TextBox3是日期模版列的控件
//定义DropDownList控件DDLState对应该行DropDownList控件
DropDownList DDLState = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("DropDownList1");
//定义sql命令
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "update NewsID set Title=@Title,Author=@Author,NewsDate=@NewsDate,State=@State where NewsID=@NewsID";
cmd.Parameters.Add("@Title", SqlDbType.NVarChar).Value = TBTitle.Text;
cmd.Parameters.Add("@Author", SqlDbType.NVarChar).Value = TBAuthor.Text;
cmd.Parameters.Add("@NewsDate", SqlDbType.DateTime).Value = TBNewsDate.Text;
cmd.Parameters.Add("@State", SqlDbType.NVarChar).Value = DDLState.SelectedItem.Value;
cmd.Parameters.Add("@NewsID", SqlDbType.Int).Value = GridView1.DataKeys[e.RowIndex].Value;
cmd.ExecuteNonQuery();
conn.Close();
GridView1.EditIndex = -1;//结束编辑状态
Bind();//重新绑定数据
}

//事件:鼠标经过的时候改变它的颜色
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
int i;
//执行循环,保证每条数据都可以更新
for (i = 0; i < GridView1.Rows.Count; i++)
{
//首先判断是否是数据行
if (e.Row.RowType == DataControlRowType.DataRow)
{
//当鼠标停留时更改背景色
e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;this.style.backgroundColor='#00A9FF'");
//当鼠标移开时还原背景色
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c");
}
}
}
}

前台代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="NewsAdmin.aspx.cs" Inherits="Admin_NewsAdmin" %>

<!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" DataKeyNames="NewsID"
AllowPaging="true" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowCancelingEdit="GridView1_RowCancelingEdit"
OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"
onrowdatabound="GridView1_RowDataBound">
<Columns>
<%--选择列--%>
<asp:TemplateField HeaderText="选择">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<%--选择列结束--%>
<%--标题--%>
<asp:TemplateField HeaderText="标题">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "~NewsDetail.aspx?="+Eval("NewsID") %>'
Text='<%# Eval("Title") %>'></asp:HyperLink>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<%--标题结束--%>
<%--发布人--%>
<asp:TemplateField HeaderText="发布人">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Author") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Author") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<%--发布人结束--%>
<%--日期--%>
<asp:TemplateField HeaderText="日期">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("NewsDate", "{0:d}") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("NewsDate") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<%--日期结束--%>
<%--审核--%>
<asp:TemplateField HeaderText="审核状态">
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Eval("State") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<%--审核结束--%>
<%--编辑列--%>
<asp:CommandField HeaderText="编辑" ShowEditButton="True" ShowHeader="True" />
<%--编辑列结束--%>
</Columns>
</asp:GridView>
<asp:CheckBox ID="cbChoosed" runat="server" OnCheckedChanged="cbChoosed_CheckedChanged"
Text="全选" AutoPostBack="True" />
<asp:Button ID="btnDelete" runat="server" Text="删除" OnClick="btnDelete_Click" />
</div>
</form>
</body>
</html>

在数据绑定中新手总是很难理解<asp:TemplateField ></ItemTemplate>中到底应该编写什么东西,其实主要用到的可以概括为,数据绑定显示和数据绑定修改两部分
数据绑定显示
<ItemTemplate><asp:Label ID="Label3" runat="server" Text='<%# Eval("State") %>'></asp:Label><ItemTemplate>

数据绑定修改

<ItemTemplate><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><ItemTemplate>

posted @ 2011-12-24 19:36  空中飞车  阅读(610)  评论(0)    收藏  举报