none
(1)从数据库中读取相关数据生成一个图片,在图片上点击时可以找到点击的区域,弹出菜单,根据菜单执行相应的操作。生成图片,我们用GDI+画图没有任何问题,但是点右键出相应菜单并执行之,好像很困难。 RRS feed

  • 问题

  • (1)从数据库中读取相关数据生成一个图片,在图片上点击时可以找到点击的区域,弹出菜单,根据菜单执行相应的操作。生成图片,我们用GDI+画图没有任何问题,但是点右键出相应菜单并执行之,好像很困难。我很想用Windows
    Form做成DLL(组件),不知道如何在asp.net如何调用它?它和服务器之间如何通信(起码要读写数据吧)?
    (另外好像不太容易找到它的引用名称)。不知道您是否有什么建议,应该看点什么东西?如果能给个例程就最好了。^_^

    感觉dr. GUI #3给了一个示例,却下载不了源码,不知道您能否发一份源码给我?

    (2)全文索引。我应用sql
    server2005做了一个全文索引,将一个对象完全存入到一个数据字段(Image类型)中,我怎样才能对它进行较高效的全文索引?怎么才能搜索出包含某几个字母的关键词?如输入ad,搜索出所有包含ad的记录(而不仅是以ad开头的)?
    (3)反射。我将该对象存入后,用反序列化读出来,可我怎么知道它的类型(强制转换或者调用方法)?难道只能一直用反射进行处理吗?比如我有两个对象:cart和employee对象,均存入了该字段,反序列化后我怎么区分这两个类?怎样根据它构造新的实例?
    2007年8月10日 2:43

答案

  • 针对您的三个问题,建议您参考下述解释:
    1.从数据库中读取数据,然后通过GDI+画出图片,并将图片保存到服务器上的指定文件夹下,再在前端的ASPX文件中通过IMG控件使用画出的图片,在该图片的onclick事件处理器中弹出菜单(菜单的实现可以由多个div构成,在每个div的onclick事件中处理相应的操作,在图片上弹出菜单可以考虑使用wondow.ShowModalDialog来实现)。
    在ASP.NET中画图请参考下述代码:
    Bitmap b = new Bitmap(600, 600);
    Graphics g = Graphics.FromImage(b);//GDI+中最重要的类
    g.Clear(Color.Red);
    Pen p = new Pen(Color.Green, 3.0f);//铅笔
    g.DrawLine(p, 0, 0, 600, 600);
    g.DrawLine(p, 600, 0, 0, 600);
    g.DrawEllipse(p, 0, 0, 100, 100);
    SolidBrush sb = new SolidBrush(Color.Blue);//固体刷
    g.FillEllipse(sb, 100, 100, 200, 200);
    g.FillRectangle(sb, 300, 300, 100, 100);
    Font f = new Font("宋体", 40);//字体
    g.DrawString("哈哈,不错!", f, sb, 0, 300);
    Point[] arrP = new Point[5];//point为基本的点
    arrP[0] = new Point(200, 200);
    arrP[1] = new Point(200, 400);
    arrP[2] = new Point(500, 400);
    arrP[3] = new Point(500, 600);
    arrP[4] = new Point(300, 600);
    g.DrawPolygon(p, arrP);
    b.Save(Response.OutputStream, ImageFormat.Gif); //将图片保存到服务器指定的文件夹下

    此外,您也可以考虑在WinForm制作一个Activex组件用来读取数据库画图并处理右键菜单,然后以ActiveX控件的形式在ASP.NET的Web页面上调用,具体的请参考下述文章:
    http://www.cnblogs.com/homer/archive/2005/01/04/86473.aspx

    2.通过全文索引达到性能优化,建议您参考下述MSDN文章:http://technet.microsoft.com/zh-cn/library/ms142560.aspx
    查询包含ad的关键词的全文本搜索SQL,您可以尝试如下:
    Select * From Table Where contains('列名','*ad*')

    3.将cart和employee对象序列化后,在将它们从流反序列化为对象时,尝试将该对象强制转换为cart或emplyee,如果其中一个强制转换失败,则为另外一个对象。在网络传输中使用序列化和反序列化,我的建议是最好将每个需要传输的对象分别序列化,然后在接收端反序列化获得该对象,而不要将多个对象序列化到一个流中。
    2007年8月10日 3:54