2009年9月51CTO驻站专家桂素伟老师.NET精彩问答

原创
开发 后端
51CTO开发频道推出“驻站专家”栏目,致力于打造专家级的用户体验。9月我们将请到国内.NET方面的专家桂素伟老师为大家答疑解惑,本文是9月驻站专家的经典问题总结。

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多定向支持
责任编辑:彭凡 来源: 51CTO
相关推荐

2009-11-09 16:39:17

51CTO驻站专家

2009-09-07 10:42:16

51CTO驻站专家

2009-12-04 13:32:36

51CTO驻站专家

2010-01-19 09:53:44

51CTO驻站专家

2010-01-19 11:21:20

51CTO驻站专家

2009-12-31 16:07:00

微软MVP

2011-10-12 21:16:19

LightSwitch

2009-09-16 14:31:19

三级网络技术计算机等级考试

2009-09-19 11:47:03

2009年9月计算机等2009年9月等级考试

2009-09-16 14:31:19

四级网络工程师计算机等级考试

2009-09-16 14:29:34

三级网络技术计算机等级考试

2009-03-22 10:57:48

CCNA视频教程下载

2012-12-04 11:04:34

2012年度IT博客大IT博客大赛博客

2009-09-16 11:02:52

四级网工技术压轴试题

2009-09-14 16:55:16

2011-09-15 17:07:50

开发月刊

2009-04-29 14:57:28

系统分析师预测题软考

2009-05-24 07:37:28

软考答案2009年上半年

2009-09-17 14:19:13

等级考试网络工程师预测题答案

2011-12-23 16:13:25

点赞
收藏

51CTO技术栈公众号