本人日前正在做一个公司综合信息管理系统,遇到了一些问题,特此向大家请教。系统里面有一个“报表管理”的模块,模块中包含了公司所有营销人员的日工作报表,每一份报表里面是该营销人员每天拜访客户的详细记录,这些记录都是由当事人自己在每天工作结束后填写报表并录入的,我现在想实现这样一个效果:新增报表页面:首先有一个大的表格,前5行是一些基本信息,有如下字段,“填报人姓名”、“所属机构”、“所属部门”、“填报时间”,“日工作目标总体概述”,从第6行开始就包含了一个GridView,里面显示具体的拜访记录,有如下字段,“序号”、“拜访时间”、“拜访客户单位名称”、“被拜访人”、“拜访人职务”、“联系方式”、“主要沟通内容”、“下一步措施或结论”然后在这个大表格下方,有7个文本框和一个提交按钮,用来新增每一条具体的拜访记录最后在大表格的外面还有一个总的提交按钮,等所有的拜访记录全部添加完后,把整个表格中的信息看做是一个整体,一起提交,存入到数据库里去
补充几点:新增拜访记录时,我只想刷新GridView,其余部分不用刷新在新增记录的过程中,我也可以随时对已添加的记录进行修改和删除拜访记录的数量每天都不固定,有时多有时少,但考虑到实际情况,应该最多不会超过20条,所以GridView不需要做分页,一直往下排即可
如何实现以上的功能?数据库里的表和字段该如何设计,我个人想法是打算分成两个表,“日工作基本信息表”,“日拜访客户明细表”,前一个表用来存前5个字段;后一个表用来存GridView里的记录,如何把这两张表关联起来?在逐一新增每条拜访记录时,它们并不是立即存到数据库里,只是先存在GridView里,等所有拜访记录全部输入完毕后,点总的那个提交按钮时,才真正开始插入数据。而且根据逻辑关系,应该是先在“基本表”里新增一条记录,成功以后获取主键ID,然后把该主键ID作为“明细表”里的外键,再逐一插入每条拜访记录。
我说的这个,感觉有点类似于订单管理,比如有一张订单,可以看作一条记录,这张订单里面又包含了多个商品,创建订单时,应该先逐一添加商品(订单明细表),全部完毕后,再把它看作一个整体,存到订单基本表里。
情况就是这样,不知道我描述地够不够清楚,乍一看上去,可能感觉逻辑关系比较复杂,我现在思路不是很清晰,想法是有,但具体做起来,却不知从何入手,所以真诚地向大家请教,希望能够给我一些指点,越详细越好,如果能再提供一些功能类似的源代码或项目网址,供我参考,那就更好了。

解决方案 »

  1.   

    前台<%@ Page Language="C#" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <title>报表管理-新增报表 </title>
    <style type="text/css">
    #tb1 td { padding: 2px }
    #tb1 input[type='text'] { width: 100%; border:none; }
    </style>
    <script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" type="text/javascript"></script>
    </head>
    <body>
    <form id="form1" runat="server"><table id="tb1" border="1" cellpadding="0" cellspacing="0" >
    <col width="100" />
    <tr><td>填报人姓名</td><td><asp:TextBox ID="Reporter" runat="server"></asp:TextBox></td></tr>
    <tr><td>所属机构</td><td><asp:TextBox ID="Institution" runat="server"></asp:TextBox></td></tr>
    <tr><td>所属部门</td><td><asp:TextBox ID="Department" runat="server"></asp:TextBox></td></tr>
    <tr><td>填报时间</td><td><asp:TextBox ID="ReportTime" runat="server"></asp:TextBox></td></tr>
    <tr><td>日工作目标总体概述</td><td><asp:TextBox ID="Summary" runat="server"></asp:TextBox></td></tr>
    <tr><td colspan="2" style="padding:0">
    <table id="tb2" border="1" cellpadding="0" cellspacing="0">
    <col width="50" />
    <tr>
    <td>序号</td>
    <td>拜访时间</td>
    <td>拜访客户单位名称</td>
    <td>被拜访人</td>
    <td>拜访人职务</td>
    <td>联系方式</td>
    <td>主要沟通内容</td>
    <td>下一步措施或结论</td>
    <td> </td>
    </tr>
    <tr>
    <td>  </td>
    <td><asp:TextBox ID="VisitTime" runat="server"></asp:TextBox></td>
    <td><asp:TextBox ID="ClientCompany" runat="server"></asp:TextBox></td>
    <td><asp:TextBox ID="ClientName" runat="server"></asp:TextBox></td>
    <td><asp:TextBox ID="ClientTitle" runat="server"></asp:TextBox></td>
    <td><asp:TextBox ID="Contact" runat="server"></asp:TextBox></td>
    <td><asp:TextBox ID="Minutes" runat="server"></asp:TextBox></td>
    <td><asp:TextBox ID="FollowUp" runat="server"></asp:TextBox></td>
    <td><a href="#" onclick="delVisitRecord(this);return false;" >删除</a></td>
    </tr>
    </table>
    <a href="javascript:addVisitRecord()">增加一条</a>
    </td></tr>
    </table>
    <asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" /><asp:HiddenField ID="RowsCount" runat="server" Value="1" /><script type="text/javascript">
    var row_tmplate;
    $(function() {
    row_template = "<tr>" + $('#tb2 tr:last').html() + "</tr>";
    });function addVisitRecord() {
    $('#tb2 tr:last').after(row_template);
    $('#RowsCount').val(reorder());
    }
    function delVisitRecord(a) {
    $(a).closest("tr").remove();
    $('#RowsCount').val(reorder());
    }
    function reorder() {
    var n=0;
    $('#tb2 tr:not(:first) td:first-child').each( function() { $(this).text( ++n) });
    return n;
    }
    </script></form>
    </body>
    </html>后台using System;
    using System.Data;
    using System.Web;
    using System.Data.SqlClient;namespace WebApplication1
    {
    public partial class _Default : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    } protected void Button1_Click(object sender, EventArgs e)
    {
    string conn = "Data Source=<xxxx>;Initial Catalog=<xxxx>;User ID=<xxx>;Password=<xxx>";

    SqlDataAdapter da = new SqlDataAdapter("select * from Reports", conn);
    new SqlCommandBuilder(da);
    DataTable dt = new DataTable();
    da.FillSchema(dt, SchemaType.Source); Guid id = Guid.NewGuid();
    DataRow row = dt.NewRow();
    row["Id"] = id;
    row["Reporter"] = Reporter.Text;
    row["Institution"] = Institution.Text;
    row["Department"] = Department.Text;
    row["ReportTime"] = ReportTime.Text;
    row["Summary"] = Summary.Text;
    dt.Rows.Add(row);
    da.Update(dt); da = new SqlDataAdapter("select * from Visits", conn);
    new SqlCommandBuilder(da);
    dt = new DataTable();
    da.FillSchema(dt, SchemaType.Source); for (int i = 0; i < Convert.ToInt32(RowsCount.Value); i++)
    {
    row = dt.NewRow();
    row["Id"] = Guid.NewGuid();
    row["ReportId"] = id;
    row["VisitTime"] = VisitTime.Text.Split(',')[i];
    row["ClientCompany"] = ClientCompany.Text.Split(',')[i];
    row["ClientName"] = ClientName.Text.Split(',')[i];
    row["ClientTitle"] = ClientTitle.Text.Split(',')[i];
    row["Contact"] = Contact.Text.Split(',')[i];
    row["Minutes"] = Minutes.Text.Split(',')[i];
    row["FollowUp"] = FollowUp.Text.Split(',')[i];
    dt.Rows.Add(row);
    }
    da.Update(dt); Response.Write("添加成功");
    Response.End();
    }
    }
    }
    数据库
    CREATE TABLE [dbo].[Visits](
    [Id] [uniqueidentifier] NOT NULL,
    [ReportId] [uniqueidentifier] NOT NULL,
    [VisitTime] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
    [ClientCompany] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
    [ClientName] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
    [ClientTitle] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
    [Contact] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
    [Minutes] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
    [FollowUp] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
     CONSTRAINT [PK_Visits_1] PRIMARY KEY CLUSTERED 
    (
    [Id] ASC
    ) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]GOCREATE TABLE [dbo].[Reports](
    [Id] [uniqueidentifier] NOT NULL,
    [Reporter] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
    [Institution] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
    [Department] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
    [ReportTime] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
    [Summary] [ntext] COLLATE Chinese_PRC_CI_AS NULL,
     CONSTRAINT [PK_Reports_1] PRIMARY KEY CLUSTERED 
    (
    [Id] ASC
    ) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]