GridView1删除修改字段类型全而且用GridView集成处理.docx
《GridView1删除修改字段类型全而且用GridView集成处理.docx》由会员分享,可在线阅读,更多相关《GridView1删除修改字段类型全而且用GridView集成处理.docx(20页珍藏版)》请在冰豆网上搜索。
![GridView1删除修改字段类型全而且用GridView集成处理.docx](https://file1.bdocx.com/fileroot1/2022-12/29/7e01d9a7-47cd-4c80-96ac-a1c578d743a2/7e01d9a7-47cd-4c80-96ac-a1c578d743a21.gif)
GridView1删除修改字段类型全而且用GridView集成处理
详细
学习内容:
TemplatedField模板列技术、使用绑定列技术、鼠标所在行颜色提示、绑定列中使用下拉列表框、设置字段的ControlStyle属性
1.在VS2008中建立Web项目。
2.在Windows环境下将数据库jyxystu.mdf(命名含义为教育学院学生)和jyxystu.ldf拷贝到项目的App_Data目录下,并在VS中添加的项目中。
3.在SQLServer2000中附加数据库jyxystu.mdf。
4.在数据库中建立一个表:
tb_zg(命名含义为职工表,以tb开头意思是本对象是一个表),表结构如下:
字段名
数据类型
长度
主键否
描述
zgbh
varchar
4
是
职工编号
xm
varchar
50
职工姓名
xb
varchar
2
性别
csny
datetime
8
出生年月
gl
int
4
职工工龄
gz
float
8
职工工资
5.录入若干条记录(为了看出效果,记录数至少20条)
6.修改web.config文件,
(1)删除下方的
(2)在位置下增加:
7.在项目中添加Web窗体mygridview.aspx(文件名含义为按类查询)
8.布局控件如下:
一个GridView,在GridView下方有两个label,准备显示第x页共y页。
ID属性分别是Label1和Label2。
GridView1自动套用格式为"雪松"。
AutoGenerateColumns="False"
AllowSorting="True"
AllowPaging="True"
PageSize="10"
因为要采用分页技术所以需要再设置PagerSettings属性
FirstPageText="首页"
LastPageText="尾页"
NextPageText="下一页"
PreviousPageText="上一页"
Mode="NextPreviousFirstLast"
把GridView中的FontSize设为small。
GridView的DataKeyNames属性为"zgbh"
GridView1编辑列界面如下(通过“添加列”),如图所示:
其中在“选定的字段”下各字段的属性设置如下:
可用字段类型
选定的字段
DataField属性
HeaderText属性
SortExpression属性
readonly属性
ControlStyleWidth属性
DataFormatString
BoundField
职工编号
zgbh
职工编号
zgbh
True
BoundField
姓名
xm
姓名
80px
TemplateField
性别
性别
40px
BoundField
出生年月
csny
出生年月
csny
120px
{0:
yyyy-MM-dd}
或{0:
d}
BoundField
工龄
gl
工龄
gl
30px
BoundField
工资
gz
工资
gz
60px
{0:
c}
会显示货币符号
CommandField
编辑
编辑
TemplateField
删除
删除
备注:
1.ControlStyleWidth属性是解决GridView进入编辑状态后表格列宽紊乱的问题,对文本框进行强制宽度设置。
2.DataFormatString属性是解决数据显示问题的,在此例中引入该属性是为了控制日期型数据显示为2010-10-11格式的。
此外:
编辑按钮还需设置属性:
ShowEditButton="True"
删除按钮还需设置属性:
ButtonType="Button"CommandName="delete"Text="删除"
补充知识DataFormatString属性常见取值:
{0:
c}货币格式
{0:
d}短日期2010-10-12
{0:
D}长日期2010年10月12日
{0:
000.0}四舍五入小数点保留第几位有效数字;
{0:
N2}小数点保留2位有效数字;{0:
N2}% 小数点保留2位有效数字加百分号;
{0:
yy-MM-dd} 例如07-3-25;;{0:
yyyy-MM-dd} 例如2007-3-25
9.切换到源视图,补充性别绑定列的HTML代码。
TemplateFieldHeaderText="性别">
DropDownListID="DropDownList2"runat="server"selectedvalue='<%#bind("xb")%>'>
ListItem>男
ListItem>
ListItem>女
ListItem>
DropDownList>
LabelID="Label1"runat="server"Text='<%#Bind("xb")%>'>
Label>
TemplateField>
说明:
(1)希望网页运行后,当GridView进入编辑状态后,在性别列处显示的是下拉列表框,在下拉列表框中有男、女两个选项供选择,要比提供文本框输入男和女,显得界面更友好,如果单纯用文本框输入,就不用搞这么复杂了,直接用一个BoundField列就可以了。
(2)除手工在源视图下填写代码外,另外一种正规方法是在GridView上点智能标记,调用快捷菜单“编辑模板”,然后选Column[2]-性别,进入模板列编辑状态,在此图中可设插入控件,编辑完后点“结束模板编辑”按钮返回,如果同学们采用这种方法,那么在设计完后,对照一下HTML代码,看有无缺漏。
另外ItemTemplate是浏览状态下的控件显示。
EditItemTemplate是编辑状态下的控件显示。
(3)使用Bind方法可将修改后的数据写回,通常在数据绑定控件的EditItemTemplate或InsertItemTemplate模板中使用Bind方法,并将字段名称传递给它,以显示和编辑字段数据,双向绑定语法格式如下:
'<%#Bind("字段名")%>'
(4)在编辑模板状态下,在ItemTemplate模板中为“删除”按钮设置以下这些属性。
关键是CommandName="delete"OnClientClick="returnconfirm("您确定要删除该条记录吗?
");"
10.导入命名空间:
usingSystem.Data.SqlClient;//cyd2010.10导入命名空间,此例就不用类来处理了
11.在Page_Load函数上方写下数据库连接字符串
//cyd2010.10声明连接字符串,所取值来自于Web.config文件中的键
stringMyConnStr=System.Configuration.ConfigurationSettings.AppSettings["ConnStr"];
12.Page_Load函数如下:
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!
Page.IsPostBack)bindgrid();//cyd2010.10首次运行,表格绑定数据源
}
13.用户自定义函数bindgrid()函数如下:
voidbindgrid()
{
DataSetds=newDataSet();
using(SqlConnectionsqlconn=newSqlConnection(MyConnStr))
{
SqlDataAdaptersqld=newSqlDataAdapter("selectzgbh,xm,xb,csny,gl,gzfromtb_zg",sqlconn);
sqld.Fill(ds,"tb_zg");
}
//cyd2010.10判断是否已经进行排序,如果是则按照ViewState中存储的信息生成排序后的DataView对象
if(ViewState["SortDirection"]==null)
GridView1.DataSource=ds.Tables["tb_zg"].DefaultView;
else
{
DataViewSortedDV=newDataView(ds.Tables["tb_zg"]);
SortedDV.Sort=ViewState["SortExpression"].ToString()+""+ViewState["SortDirection"].ToString();
GridView1.DataSource=SortedDV;
}
GridView1.DataBind();
}
14.GridView1的Sorting事件代码如下:
protectedvoidGridView1_Sorting(objectsender,GridViewSortEventArgse)
{
if(ViewState["SortDirection"]==null)ViewState["SortDirection"]="DESC";
if(ViewState["SortDirection"].ToString()=="ASC")
ViewState["SortDirection"]="DESC";
else
ViewState["SortDirection"]="ASC";
ViewState["SortExpression"]=e.SortExpression;
this.bindgrid();
}
15.GridView1的RowDeleting事件代码如下:
protectedvoidGridView1_RowDeleting(objectsender,GridViewDeleteEventArgse)
{
//cyd2010.10设置数据库连接
SqlConnectionsqlconn=newSqlConnection(MyConnStr);
sqlconn.Open();
//cyd2010.10删除记录
Stringsql="deletefromtb_zgwherezgbh='"+GridView1.DataKeys[e.RowIndex].Value.ToString()+"'";
SqlCommandComm=newSqlCommand(sql,sqlconn);
Comm.ExecuteNonQuery();
sqlconn.Close();
sqlconn=null;
Comm=null;
GridView1.EditIndex=-1;
bindgrid();
}
16.GridView1的RowEditing事件代码如下:
protectedvoidGridView1_RowEditing(objectsender,GridViewEditEventArgse)
{
GridView1.EditIndex=e.NewEditIndex;
bindgrid();
}
17.GridView1的RowCancelingEdit事件代码如下:
protectedvoidGridView1_RowCancelingEdit(objectsender,GridViewCancelEditEventArgse)
{
GridView1.EditIndex=-1;
bindgrid();
}
18.GridView1的RowUpdating事件代码如下:
protectedvoidGridView1_RowUpdating(objectsender,GridViewUpdateEventArgse)
{
SqlConnectionsqlconn=newSqlConnection(MyConnStr);
//cyd2010修改记录
try
{
sqlconn.Open();
SqlCommandComm=newSqlCommand();
Comm.Connection=sqlconn;
Comm.CommandText="updatetb_zgsetxm=@xm,xb=@xb,csny=@csny,gl=@gl,gz=@gzwherezgbh=@zgbh";
Comm.Parameters.AddWithValue("@zgbh",GridView1.DataKeys[e.RowIndex].Value.ToString());//cyd2010.10职工编号做为主索引,是在gridview中设置的属性DataKeyNames="zgbh"
Comm.Parameters.AddWithValue("@xm",((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text);
Comm.Parameters.AddWithValue("@xb",((DropDownList)GridView1.Rows[e.RowIndex].Cells[2].Controls[1]).Text);//cyd2010.10因为性别是用下拉列表框来处理的,属于模板字段,所以为1,其它都为0
Comm.Parameters.AddWithValue("@csny",((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text);
Comm.Parameters.AddWithValue("@gl",((TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).Text);
Comm.Parameters.AddWithValue("@gz",((TextBox)GridView1.Rows[e.RowIndex].Cells[5].Controls[0]).Text);
Comm.ExecuteNonQuery();
sqlconn.Close();
sqlconn=null;
Comm=null;
}
catch(Exceptionex)
{
Response.Write("数据库更新出错"+ex.ToString());
}
GridView1.EditIndex=-1;
bindgrid();
}
19.GridView1的PageIndexChanging事件代码如下:
protectedvoidGridView1_PageIndexChanging(objectsender,GridViewPageEventArgse)
{
//cyd2010.10设置要显示的页的索引并重新绑定数据
GridView1.PageIndex=e.NewPageIndex;
bindgrid();
}
20.GridView1的DataBound事件代码如下:
protectedvoidGridView1_DataBound(objectsender,EventArgse)
{
//cyd2010.10分页数据绑定前设置当前页信息
Label2.Text="共"+(GridView1.PageCount).ToString()+"页";
Label1.Text="第"+(GridView1.PageIndex+1).ToString()+"页";
}
21.GridView1的RowDataBound事件代码如下(在该事件中解决两个问题,一是鼠标移到行上时变时;一是解决删除记录时给一次后悔机会):
protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse)
{inti;
//cyd2010.10执行循环,保证每条数据都可以更新
for(i=0;i<=GridView1.Rows.Count;i++)
{//cyd2010.10首先判断是否是数据行
if(e.Row.RowType==DataControlRowType.DataRow)
{//cyd2010.10当鼠标停留时更改背景色
e.Row.Attributes.Add("onmouseover","c=this.style.backgroundColor;this.style.backgroundColor='#00A9FF'");
//cyd2010.10当鼠标移开时还原背景色
e.Row.Attributes.Add("onmouseout","this.style.backgroundColor=c");
}
}
/*以前用以下这段代码配合删除按钮,进行删除前确认,但是失败了,原因是两段代码冲突,后将GridView中的删除按钮列转换成
模板列,并给ItemTemplate模板中为按钮的OnClientClick事件写代码:
returnconfirm("您确定要删除该条记录吗?
");就实现了删除前有确认对话框的效果
//cyd2010.10解决删除记录时有提示
if(e.Row.RowType==DataControlRowType.DataRow)
{
if(e.Row.RowState==DataControlRowState.Normal||e.Row.RowState==DataControlRowState.Alternate)
{
((Button)e.Row.Cells[7].Controls[0]).Attributes.Add("onclick","javascript:
returnconfirm('你确认要删除:
\""+e.Row.Cells[1].Text+"\"吗?
')");
}
}
*/
}
【结束】
2010年10月30日
本程序还需要解决的问题:
1.将插入记录集成到GridView。
2.将验证控件集成到GridView。
将在下一节课中处理。
作业:
将工程中素材修改为以下班级表,请同学们将文件进行修改,记录自已加:
字段名
数据类型
长度
主键否
描述
bjh
varchar
4
是
班级号
bjm
varchar
50
班级名
rs
int
4
人数
rxsj
datetime
8
入学时间
bzr
varchar
50
班主任
GridView事件总结:
序号
事件
说明
1
PageIndexChanged
在单击某一页导航按钮时,但在GridView控件处理分页操作之后发生。
此事件通常用于以下情形:
在用户定位到该控件中的另一页之后,您需要执行某项任务。
2
PageIndexChanging
在单击某一页导航按钮时,但在GridView控件处理分页操作之前发生。
此事件通常用于取消分页操作。
3
RowCancelingEdit
在单击某一行的“取消”按钮(其CommandName属性设置为“Cancel”的按钮)时,但在GridView控件退出编辑模式之前发生。
此事件通常用于停止取消操作。
4
RowCommand
当单击GridView控件中的按钮时发生。
此事件通常用于在控件中单击按钮时执行某项任务。
5
RowCreated
当在GridView控件中创建新行时发生。
此事件通常用于在创建行时修改行的内容。
6
RowDataBound
RowDataBound顾名思义,行绑定的时候触发的事件,由于GridView被加载的时候不是一下子出来的,就是一行一行的出来的,每出来一行,就触发一次RowDataBound事件,最终把整个GridView加载出来,你可以针对这个事件处理相应的事情,比如,在每一行添加OnMourseOver,OnMourseOut事件,这样GridView的每一行就有了这些事件。
7
RowDeleted
RowDeleted发生在删除数据之后。
在单击某一行的“删除”按钮(其CommandName属性设置为“Delete”的按钮)时,但在GridView控件从数据源中删除相应记录之后发生。
此事件通常用于检查删除操作的结果。
8
RowDeleting
RowDeleting发生在删除数据之前,在单击某一行的“删除”按钮(其CommandName属性设置为“Delete”的按钮)时,但在GridView控件从数据源中删除相应记录之前发生。
此事件通常用于取消删除操作。
9
RowEditing
在GridView中的行进入编辑模式之前,引发RowEditing事件,如果您需要在编辑记录前进行某些预处理,可以在这里操作。
发生在单击某一行的“编辑”按钮(其CommandName属性设置为“Edit”的按钮)以后,GridView控件进入编辑模式之前。
此事件通常用于取消编辑操作。
10
RowUpdated
RowUpdated发生在更新数据源之后。
发生在单击某一行的“更新”按钮(其CommandName属性设置为“Update”的按钮),并且GridView控件对该行进行更新之后。
此事件通常用于检查更新操作的结果。
11
RowUpdating
RowUpdating事件发生在更新数据源之前,发生在单击某一行的“更新”按钮以后,GridView控件对该行进行更新之前。
此事件通常用于取消更新操作。
12
Sele