下面的自定义控件——员工控件.ascx , 如何定义类

努力的小菜鸡~ 2016-06-05 12:05:45
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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 今天值班员 : System.Web.UI.Page
{
private int numrow = 3;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["name"] == null && Session["pwd"] == null)
{
Response.Redirect("~/登录.aspx");
}

SqlConnection con = BD.createDB();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = "select id from yuangong where gzzt='在岗'order by id desc";
int i = 0;
System.Web.UI.WebControls.TableRow tr = new TableRow();
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
i = i + 1;
System.Web.UI.WebControls.TableCell tc = new TableCell(); //声明一个TableCell对象
yuangong yg = (yuangong)this.LoadControl("~/员工控件.ascx"); //声明一个员工类型对象
yg.id1 = sdr.GetString(0);
tc.Controls.Add(yg); //将声明的用户自定义控件的对象填充到单元格中
tr.Controls.Add(tc); //将声明的单元格对象填充到行中
if (i % numrow == 0)
{
Table1.Rows.Add(tr); //向动态表添加行
tr = new TableRow();
}
if (i % numrow != 0)
{
Table1.Rows.Add(tr);
}
}
sdr.Close();
con.Close();
}
}
...全文
108 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
上述分离的方式,在创建 ascx 时声明 code behind 代码类型也会写成
public partial class 员工 : System.Web.UI.UserControl, yuangong;
也就是说这个用户控件同时也具有 yuangong 接口。这是比较好的声明方式。 而你贴出的那种代码,说明你们在设计 yuangong 类型时是把它也作为用户控件来看待的,一个 yuangong 同时也就是一个用户控件。这种耦合往往是只顾眼前,为了编程而编程,看似高大上地用了什么“继承”技术,而实则是技术的负面。
  • 打赏
  • 举报
回复
实际上,上面是根据你贴出的代码看到的内容。 比较好的设计不是这样的。比较好的设计是将 yuangong 与 UserControl 相分离。 由于 .net 非常遗憾地不能支持多重继承技术,所以 yuangong 只能设计为一个 interface(如果能设计为一个 class 该多好啊!)。然后在上述程序中应该写
            UserControl yg = this.LoadControl("~/员工控件.ascx");  //声明一个员工类型对象
            yuangong ps = (yuangong)yg;
            ps.id1 = sdr.GetString(0);
            tc.Controls.Add(yg);   //将声明的用户自定义控件的对象填充到单元格中
            tr.Controls.Add(tc);   //将声明的单元格对象填充到行中
这是按照接口编程思路。将员工接口独立出来,不跟 UserControl 类型耦合,才能独立设计许多功能,在用到这里之前 yuangong 接口可以用在许多地方的开发中。而如果跟 UserControl 纠结在一起,就无法很好滴独立设计开发 yuangong 业务功能了。
  • 打赏
  • 举报
回复
yuangong 是一个父类,提供功能接口(在设计上我们往往把父类也叫做接口)。从你的代码上看,它应该是从 UserControl 继承的,并且它有一个 string 类型的名为 id1 的属性。 当你创建一个“员工控件.ascx”之后,你可以把
public partial class xxxxxx : System.Web.UI.UserControl
改为
public partial class xxxxxx : yuangong
这就是全部要求。能实现这个要求即可。 如果不理解为什么要这样做,那么你应该问你的技术经理。如果你的技术知识不足以团队开发,应该赶紧补课。你的单位、团队会培训的。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧