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

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

目前成都创新互联公司已为1000多家的企业提供了网站建设、域名、网页空间、网站改版维护、企业网站设计、太和网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

桂素伟,微软MVP,专家堂成员。微软中文技术论坛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月驻站专家周金桥老师精彩问答
  2. .NET C# DES入门浅析
  3. .NET写入文本文件的操作浅析
  4. .NET自定义控件应该如何实现?
  5. 浅析.NET 4.0和Visual Studio 2010多定向支持

标题名称:2009年9月51CTO驻站专家桂素伟老师.NET精彩问答
文章URL:http://www.36103.cn/qtweb/news21/5271.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联