论文部分内容阅读
摘 要:本文通过一个实例,对.net编程中常用的GirdView控件的灵活应用做一详细的说明,为一般书籍上所未介绍的方法,尤其值得从事.net开发的人员学习。
关键词:GridView 数据绑定方法 存储过程
中图分类号:G718.1 文献标识码:A 文章编号:1673-9795(2011)02(b)-0175-02
GridView是在.net中功能非常强大的一种控件,关于它的一般应用,各种书籍和网络上介绍得都有很详细,今年因为要给单位开发一套关于教师评价的软件,为了实现一个功能,发现用这个控件是最适合的,这里就通过对这个功能的实现过程,来介绍我对这个软件的应用。
首先来说一下要实现的功能,根据当前操作人员所在的系部,从数据表pj_content中读取本系的评价标准,其中pj_content表中包括的与该操作有关的字段为:pjnr(评价项目),pjlb(所属分类),fen(满分值),读取数据是通过一个名为pj_ReadXnpjnr的存储过程实现。
其界面如下,左侧是本系部待评价教师的名单列表,右侧是评价项目,由于不同的系部评价项目是不相同的,所以必需根据当前登陆人员所在的系部来读取适用于该系部的评价项目。因此,这些项目是动态变化的,用Gridview控件来实现对项目的显示,并在控件中放入不同的评价等级选项,供评价用户选对不同的项目给出不同的评定等级,然后针对不同的评定等级,结合该项目的满分值,系统自动计算出项目所给的分值,点击确定后,将每项的评价结果填入系统中(通过另一存储过程Pj_SavePjResult来完成)。
其界面如图1所示。
首先进行界面的设计,为减少赘述,这里仅实现其主要功能,对于界面的美工不涉及。
(1)在“解决方案资源管理器”中,选择“添加新项”,语言为“Visual C#”,确认“将代码放在单独的文件中”;
(2)向页面中添加两个SqlDatasource控件,分别用默认名:SqlDataSource1和SqlDataSource2,其中Sqldatasource1用于从数据表pj_teacher中读取属于本系的教师名单;SqlDataSource2用于读取登陆人所在系部的评价项目。单击SqlDataSource1,设置数据源为“指定来自表或视图的列”,名称为“pj_Teacher”,选取列为Teacherid和Tname;
(3)添加listbox控件,修改其ID值为:Teacherid,设置数据源为上面建好的SqlDataSource1,显示字段为Tname,值字段为Teacherid;
(4)配置SqlDataSource2,在“希望如何从数据库中检索数据?”中,选择“指定自定义SQL语句或存储过程”,点击“下一步”,选择存储过程为Pj_ReadxnPjnr,点击“下一步”,出现“定义参数”对话框,这里是指定xibie参数,通过Session变量获取。
(5)添加GridView,设置数据源为SqlDataSource2,选择“编辑列”,点击“刷新架构”,由于刷新时要通过存储过程来读取数据,因此要输入一个xibie的输入参数,在值一项中输入一个系部名称,这里输入“基础部”,点击确定后,出现“无法检索架构,对象名‘#t’无效”的提示。
打开该存储过程,可以看到,该存储过程并没有问题,出现错误的原因是因为在这种调试状态下系统无法正确检索存储过程的复杂架构,我们把这个存储过程先修改一下,直接读出需要的数据,全部设置好后再记得修改回来:
CREATE PROCEDURE dbo.Pj_ReadxnPjnr
@xibie nvarchar(30)
as
set nocount on
begin
select pjtype,pjnr,id,fen from Pj_Content
set @rows=@@rowcount
return @rows
end
GO
刷新通过,并在可用字段中的BoundField下自动产生了四个字段,分别是pjtype,pjnr,id,fen。
这里我们不需要引用id字段,因此选择BoundField项下除id字段外的其余三个使之出现在选定字段中,由于我们要添加一列,用于放置“评价结果”。为此,点击TemplateField,添加一个模板字段备用。
设置各字段项目的HeaderText值,注意对应关系(pjtype:评价类别,pjnr:评价项目,TemplateField:评价结果,fen:满分),取消“自动生成字段”选项,以免产生无用的数据列。
点击每个项目,选“将此字段转换为TemplateField”。
选编辑模板中的“评价结果”项,该项目对应于“评价结果”列,用于放置几个用于选择评价结果的单选按钮。
为了放置单选按钮在其中,删除其中ItemTemplate中的[Label]标签,拖动一个Ridiobuttonlist控件进入该项目的ItemTemplate模板中,编辑Ridiobuttonlist的项目,各项目的文本与其值的对应关系为:优秀—5,良好—4,较好—3,一般—2,较差—1,特差—0;
拖动GridView 的控制柄,调整其宽度足够宽,以免文字出现竖排现象;
在Griview控件下方拖入一ImageButton控件,设置好其ImageUrl,双击,在其代码段中填加如下代码。该段代码解释如下:
(1)string strTeacherid=Teacherid.SelectedValue;
(2)string strTeacherinfo=Teacherid.SelectedItem.Text;
(3)ConnectionStringSettings con=ConfigurationManager.ConnectionStrings["PjConnectionString"];
(4)string strConnection=con.ConnectionString;
(5)SqlConnection myCon=new SqlConnection();
(6)myCon.ConnectionString=strConnection;
(7)myCon.Open();
(8)SqlCommand cmd=new SqlCommand();
(9)cmd.Connection=myCon;
(10)cmd.CommandText="Pj_SavePjResult";
(11)cmd.CommandType=CommandType.StoredProcedure;
(12)SqlParameter prevalue=new SqlParameter("@revalue",SqlDbType.Int);
(13)prevalue.Direction=ParameterDirection.Output;
第1~13行用于获取被评价教师的信息,及进行数据库的链接,指定命令类型为存储过程方式,关于此类应用网上有很多解释,此处不讨论。
(14)for (int i = 0; i < GridView1.Rows.Count; i++)
(15){
(16)string strpjtype=((Label)(GridView1.Rows[i].FindControl("Label1"))).Text.ToString().Trim();
(17)string strpjnr=((Label)(GridView1.Rows[i].FindControl("Label2"))).Text.ToString().Trim();
(18)string strNewFen=((RadioButtonList)(GridView1.Rows[i].FindControl("R
(19)string strFen=((Label)(GridView1.Rows[i].FindControl("Label3"))).Text.ToString().Trim();
(20)int intFen=Convert.ToInt32(strFen);
(21)int intNewFen=Convert.ToInt32(strNewFen);
(22)intNewFen=intFen / 5 * intNewFen;
(23)cmd.Parameters.Clear();
(24)cmd.Parameters.Add("@teacherid", SqlDbType.NVarChar, 10).Value = strTeacherid;
(25)cmd.Parameters.Add("@teacherinfo", SqlDbType.NVarChar, 50).Value = strTeacherinfo;
(26)cmd.Parameters.Add("@pjtype", SqlDbType.NVarChar,16).Value = strpjtype;
(27)cmd.Parameters.Add("@pjnr", SqlDbType.NVarChar, 60).Value = strpjnr;
(28)cmd.Parameters.Add("@fen", SqlDbType.Int).Value=intNewFen;
(29)cmd.Parameters.Add("@pjr", SqlDbType.NVarChar, 20).Value = Convert.ToString(HttpContext.Current.Session["person"]);
(30)cmd.Parameters.Add("@userid", SqlDbType.NVarChar, 20).Value = Convert.ToString(HttpContext.Current.Session["userid"]);
(31)cmd.Parameters.Add("@pjlb", SqlDbType.NVarChar, 8).Value = "xitotea";
(32)cmd.Parameters.Add(prevalue);
(33)cmd.ExecuteNonQuery();
(34)}
第14~34行,通过一个FOR循环,读取每一行的评价结果,循环写入数据库的评价结果表中。这里通过for(int i=0;i 第16行:string strpjtype=((Label)(GridView1.Rows[i].FindControl("Label1"))).Text.ToString().Trim();是读取评价分类用的,由于GridView中该列的数据是通过一个Label来展现,所以要读取其内容,要首先通过访问容件控件的方法FindControl,找到该控件,并将其显示地转换为label类,并以文本字符串的方式传递给字符串变量strpjtype。
第17、18、19行的含义基本相同,不再赘述。
第22行intNewFen=intFen/5*intNewFen;,是进行一个分值的转换。
第23行cmd.Parameters.Clear();,由于我们是通过一个FOR循环来通过存储过程填充数据,而为了减少数据库的断开与连接的频繁,我们在每次更新数据后,并不断开链接,仅是变更传递参数,所以在每次给参数赋值前,必需先对参数进行清空处理。
第35行,关闭链接,第36行,解构链接对象,这句很重要,如果没有这行,系统资源仍会有一些被浪费。
第37行,对已评价完的教师从列表中清除。
Gridview控件的功能强大,应用既方便又很复杂,必需多多实践才能领会,希望我的经验能给大家以帮助!
参考文献
[1] C#和.NET 2.0.实战:平台、语言与框架[M].人民邮电出版社.
[2] ASP.NET与AJAX深度剖析范例集[M].中国青年出版社.
关键词:GridView 数据绑定方法 存储过程
中图分类号:G718.1 文献标识码:A 文章编号:1673-9795(2011)02(b)-0175-02
GridView是在.net中功能非常强大的一种控件,关于它的一般应用,各种书籍和网络上介绍得都有很详细,今年因为要给单位开发一套关于教师评价的软件,为了实现一个功能,发现用这个控件是最适合的,这里就通过对这个功能的实现过程,来介绍我对这个软件的应用。
首先来说一下要实现的功能,根据当前操作人员所在的系部,从数据表pj_content中读取本系的评价标准,其中pj_content表中包括的与该操作有关的字段为:pjnr(评价项目),pjlb(所属分类),fen(满分值),读取数据是通过一个名为pj_ReadXnpjnr的存储过程实现。
其界面如下,左侧是本系部待评价教师的名单列表,右侧是评价项目,由于不同的系部评价项目是不相同的,所以必需根据当前登陆人员所在的系部来读取适用于该系部的评价项目。因此,这些项目是动态变化的,用Gridview控件来实现对项目的显示,并在控件中放入不同的评价等级选项,供评价用户选对不同的项目给出不同的评定等级,然后针对不同的评定等级,结合该项目的满分值,系统自动计算出项目所给的分值,点击确定后,将每项的评价结果填入系统中(通过另一存储过程Pj_SavePjResult来完成)。
其界面如图1所示。
首先进行界面的设计,为减少赘述,这里仅实现其主要功能,对于界面的美工不涉及。
(1)在“解决方案资源管理器”中,选择“添加新项”,语言为“Visual C#”,确认“将代码放在单独的文件中”;
(2)向页面中添加两个SqlDatasource控件,分别用默认名:SqlDataSource1和SqlDataSource2,其中Sqldatasource1用于从数据表pj_teacher中读取属于本系的教师名单;SqlDataSource2用于读取登陆人所在系部的评价项目。单击SqlDataSource1,设置数据源为“指定来自表或视图的列”,名称为“pj_Teacher”,选取列为Teacherid和Tname;
(3)添加listbox控件,修改其ID值为:Teacherid,设置数据源为上面建好的SqlDataSource1,显示字段为Tname,值字段为Teacherid;
(4)配置SqlDataSource2,在“希望如何从数据库中检索数据?”中,选择“指定自定义SQL语句或存储过程”,点击“下一步”,选择存储过程为Pj_ReadxnPjnr,点击“下一步”,出现“定义参数”对话框,这里是指定xibie参数,通过Session变量获取。
(5)添加GridView,设置数据源为SqlDataSource2,选择“编辑列”,点击“刷新架构”,由于刷新时要通过存储过程来读取数据,因此要输入一个xibie的输入参数,在值一项中输入一个系部名称,这里输入“基础部”,点击确定后,出现“无法检索架构,对象名‘#t’无效”的提示。
打开该存储过程,可以看到,该存储过程并没有问题,出现错误的原因是因为在这种调试状态下系统无法正确检索存储过程的复杂架构,我们把这个存储过程先修改一下,直接读出需要的数据,全部设置好后再记得修改回来:
CREATE PROCEDURE dbo.Pj_ReadxnPjnr
@xibie nvarchar(30)
as
set nocount on
begin
select pjtype,pjnr,id,fen from Pj_Content
set @rows=@@rowcount
return @rows
end
GO
刷新通过,并在可用字段中的BoundField下自动产生了四个字段,分别是pjtype,pjnr,id,fen。
这里我们不需要引用id字段,因此选择BoundField项下除id字段外的其余三个使之出现在选定字段中,由于我们要添加一列,用于放置“评价结果”。为此,点击TemplateField,添加一个模板字段备用。
设置各字段项目的HeaderText值,注意对应关系(pjtype:评价类别,pjnr:评价项目,TemplateField:评价结果,fen:满分),取消“自动生成字段”选项,以免产生无用的数据列。
点击每个项目,选“将此字段转换为TemplateField”。
选编辑模板中的“评价结果”项,该项目对应于“评价结果”列,用于放置几个用于选择评价结果的单选按钮。
为了放置单选按钮在其中,删除其中ItemTemplate中的[Label]标签,拖动一个Ridiobuttonlist控件进入该项目的ItemTemplate模板中,编辑Ridiobuttonlist的项目,各项目的文本与其值的对应关系为:优秀—5,良好—4,较好—3,一般—2,较差—1,特差—0;
拖动GridView 的控制柄,调整其宽度足够宽,以免文字出现竖排现象;
在Griview控件下方拖入一ImageButton控件,设置好其ImageUrl,双击,在其代码段中填加如下代码。该段代码解释如下:
(1)string strTeacherid=Teacherid.SelectedValue;
(2)string strTeacherinfo=Teacherid.SelectedItem.Text;
(3)ConnectionStringSettings con=ConfigurationManager.ConnectionStrings["PjConnectionString"];
(4)string strConnection=con.ConnectionString;
(5)SqlConnection myCon=new SqlConnection();
(6)myCon.ConnectionString=strConnection;
(7)myCon.Open();
(8)SqlCommand cmd=new SqlCommand();
(9)cmd.Connection=myCon;
(10)cmd.CommandText="Pj_SavePjResult";
(11)cmd.CommandType=CommandType.StoredProcedure;
(12)SqlParameter prevalue=new SqlParameter("@revalue",SqlDbType.Int);
(13)prevalue.Direction=ParameterDirection.Output;
第1~13行用于获取被评价教师的信息,及进行数据库的链接,指定命令类型为存储过程方式,关于此类应用网上有很多解释,此处不讨论。
(14)for (int i = 0; i < GridView1.Rows.Count; i++)
(15){
(16)string strpjtype=((Label)(GridView1.Rows[i].FindControl("Label1"))).Text.ToString().Trim();
(17)string strpjnr=((Label)(GridView1.Rows[i].FindControl("Label2"))).Text.ToString().Trim();
(18)string strNewFen=((RadioButtonList)(GridView1.Rows[i].FindControl("R
(19)string strFen=((Label)(GridView1.Rows[i].FindControl("Label3"))).Text.ToString().Trim();
(20)int intFen=Convert.ToInt32(strFen);
(21)int intNewFen=Convert.ToInt32(strNewFen);
(22)intNewFen=intFen / 5 * intNewFen;
(23)cmd.Parameters.Clear();
(24)cmd.Parameters.Add("@teacherid", SqlDbType.NVarChar, 10).Value = strTeacherid;
(25)cmd.Parameters.Add("@teacherinfo", SqlDbType.NVarChar, 50).Value = strTeacherinfo;
(26)cmd.Parameters.Add("@pjtype", SqlDbType.NVarChar,16).Value = strpjtype;
(27)cmd.Parameters.Add("@pjnr", SqlDbType.NVarChar, 60).Value = strpjnr;
(28)cmd.Parameters.Add("@fen", SqlDbType.Int).Value=intNewFen;
(29)cmd.Parameters.Add("@pjr", SqlDbType.NVarChar, 20).Value = Convert.ToString(HttpContext.Current.Session["person"]);
(30)cmd.Parameters.Add("@userid", SqlDbType.NVarChar, 20).Value = Convert.ToString(HttpContext.Current.Session["userid"]);
(31)cmd.Parameters.Add("@pjlb", SqlDbType.NVarChar, 8).Value = "xitotea";
(32)cmd.Parameters.Add(prevalue);
(33)cmd.ExecuteNonQuery();
(34)}
第14~34行,通过一个FOR循环,读取每一行的评价结果,循环写入数据库的评价结果表中。这里通过for(int i=0;i
第17、18、19行的含义基本相同,不再赘述。
第22行intNewFen=intFen/5*intNewFen;,是进行一个分值的转换。
第23行cmd.Parameters.Clear();,由于我们是通过一个FOR循环来通过存储过程填充数据,而为了减少数据库的断开与连接的频繁,我们在每次更新数据后,并不断开链接,仅是变更传递参数,所以在每次给参数赋值前,必需先对参数进行清空处理。
第35行,关闭链接,第36行,解构链接对象,这句很重要,如果没有这行,系统资源仍会有一些被浪费。
第37行,对已评价完的教师从列表中清除。
Gridview控件的功能强大,应用既方便又很复杂,必需多多实践才能领会,希望我的经验能给大家以帮助!
参考文献
[1] C#和.NET 2.0.实战:平台、语言与框架[M].人民邮电出版社.
[2] ASP.NET与AJAX深度剖析范例集[M].中国青年出版社.