2009年9月51CTO驻站专家桂素伟老师.NET精彩问答
创始人
2024-06-08 10:11:44
0

2009年9月51CTO驻站专家桂素伟老师简介

桂素伟,微软MVP,51CTO专家堂成员。微软中文技术论坛Visual C#、IT职业规划谈两个版块版主,微软WebCast讲师。精通C#,WinForm,ASP.NET,WPF,Windows Mobile等开发技术。山西DotNet俱乐部创始人之一,曾组织多次与微软合作组织活动,并多次组织山西DotNet俱乐部线上线下活动。

点击进入活动原帖

经典问题一

我想请问题asp.net中如何使用数据控件来处理操作复杂对象(即包对象包含子对象)。例如

流程图

此为订单管理的简要类图实现订单的CRUD我目前的做法是,指定OrderRegister为ObjectDataSource,然后使用FormView绑定到它上面。在FormView里面放入一些TextBox可以呈现出Order的简单类型的属性如Date,再在FormView里面放入GridView并绑定GridView的DataSource到Order的Items上,Items是IList类型。对于查看订单信息来说,一切都没有问题。问题在于新增和修改订单时在FromView中嵌套GridView就不行了。我想请问基于这种复杂对象设计,怎么实现主对象与子对象的新增和修改操作。

驻站专家桂素伟老师的精彩回答:

这样的话,那你就得从这些对象属性中把数据得到,灵果你用的是ADO.NET,那么就分别把这些属性的数据分离出来,用SQL语句提交到SQL Server来执行。如果是LINQ To SQL,那就把整个实体类整合成LINQ To SQL所需要的实体类,进行Submit就可以。

后续提问:

OrderRegister是用来对Order进行CRUD的,它封装了对数据库的操作,至于OrderRegister的实现是Ado.net还是linqtosql都无所谓啊。问题的关键是在复杂对象结构的情况下,表示层采用什么样的控件如何与OrderRegister连接。

由于我希望代码量尽可能的少,所以在新增Order的时候也使用FormView,问题是FormView只能处理简单属性,而不能处理对象

总而言之,就是使用FormView绑定对象数据源来进行订单的新增,页面上无法对订单里面的OrderItem进行处理。

桂素伟老师回答

是的,你在添加Order的列表时,没有办法实现。如果每个字段都是简单类型就好处理,现在关键是你的GridView没有法与Order列表对应,并且你在Order对象中,一个Date字段可对应一个OrderItem列表,这个列表的记录多少都不确定,所以没办法在FormVIews中实现。只用放出来单独处理了。

经典问题二

我在写C#语言传送文件的程序,可是在对文件操作中出现了问题。

1,服务端

定义了一个和文件大小的缓冲区,但是在以下的while循环中

  1. while (!feof(fp))   
  2. {  

用fread函数,并且获得返回值iCount = fread(pTmp,1, flen, fp);//pTmp是缓冲区,flen是文件大小

而后通过

  1. send( m_server, pTmp, iCount , 0);发送数据   
  2. }  

2,客户端

定义了接收指针char recvbuf[1024] = "";

以下也用了死循环

  1. while(true)   
  2. {   
  3.   memset(recvbuf, 0, 1024);   
  4.   bytesRecv = recv( m_socket, recvbuf, 1024, 0 );   
  5.   fwrite(recvbuf, 1, bytesRecv, fp1);   
  6. }  

可是我在文件fp1中打印的并不是完整,希望高手指点。 并且我想如果服务端不一次性全部传送,而是分大小传,比如每次只传1024字节,又该如何处理?我尝试了一些方法,但是都没达到目的。

驻站专家桂素伟老师的精彩回答

你的大文件,可以一次读进来,放在一个byte的数组中,然后你再批量分步处理这些元素就可以的。发送的时侯你考虑是多线程还是单线程,同时要考虑服务端。

经典问题三

我想请问如果想从事socket开发,那么使用。net的哪方面的控件呢,是不是也有很多托管的自动生成代码可以省掉手写的麻烦呀,我现在考虑从事网络服务器相关软件的开发,但是不知道什么开发环境是理想的选择,望桂老师给予回答。

驻站专家桂素伟老师的精彩回答

这些通用的软件开发平台都支持socket 开发,有的IDE是封装成控件,有的是封装成类。.net 的socket 有好几个类支持。常用的是TcpListener和TcpClient。同时还要使用到多线程的一些知识,也得熟悉一下。做成类的话,个人理解应该要灵活的多,想要什么方式的通迅,是一对多,还是一对一,还是多对多,都由自己写代码来完成。

【编辑推荐】

  1. 2009年8月51CTO驻站专家周金桥老师精彩问答
  2. .NET C# DES入门浅析
  3. .NET写入文本文件的操作浅析
  4. .NET自定义控件应该如何实现?
  5. 浅析.NET 4.0和Visual Studio 2010多定向支持

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...