你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / 数据库开发
3.18 Web的课题申报系统(下)
 

 


11  打印校对表图

其实现原理是将查询出来的结果集通过流文件的形式写入到浏览器并让客户端自行下载打印,输出的文档格式主要是Doc形式。下面是一个实现数据流输出的关键函数:

 Private Function PrintList()

        Dim myYear As String = DropDownListYear.SelectedValue

        Dim CmdText As String = "select [id],subjectid,iif(subjecttype=1,'指南课题','自选课题')as subjecttype,iif(sciencetype=1,'人文学科','经济学科')as sciencetype ,subjectName,chiefman,workdepartment ,officetel,HomeTel,Address,PostCode,Member1 ,Member2 ,Member3 ,Member4 ,Member5 ,Member6 ,Member7 ,Member8 ,Member9 ,Member10 From [Report] where  Status=false  "

        CmdText &= " and  year([year])= "

        CmdText &= " '" & myYear & "' "

        Dim da As OleDbDataAdapter = New OleDbDataAdapter(CmdText, myConnection)

        Dim ds As DataSet = New DataSet

        da.Fill(ds, "myTable")

        Dim dt As DataTable = ds.Tables("myTable")

        Dim sw As System.IO.StringWriter = New StringWriter

        sw.WriteLine("***科委" & myYear & "年科研申报校对表")

sw.WriteLine("======================================================================")

        sw.WriteLine("")

        For Each dr As DataRow In dt.Rows

            sw.WriteLine("编 号:" & dr("subjectID") & " 类别:" & dr("subjectType") & " 学科分类:" & dr("scienceType"))

            sw.WriteLine("题 目:" & dr("subjectName"))

            sw.WriteLine("负责人:" & dr("chiefman") & " 工作单位:" & dr("workdepartment")& " 办:" & dr("officetel") & " 宅:" & dr("homeTel"))

            sw.WriteLine("住 址:" & dr("Address") & " 邮编:" & dr("PostCode"))

            sw.WriteLine("成 员:" & dr("Member1") & " " & dr("Member2") & " " & dr("Member3") & " " & dr("Member4") & " " & dr("Member5") & " " & dr("Member6") & " " & dr("Member7") & " " & dr("Member8") & " " & dr("Member9") & " " & dr("Member10"))

            sw.WriteLine("")

        Next

        sw.Close()

        Response.AddHeader("Content-Disposition", "attachment; filename=" & myYear & "notCheck.doc")

        Response.ContentType = "application/ms-word"

        Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312") '输出的字符格式为"GB2312"

        Response.Charset = ""

        Response.Write(sw)

        Response.End()

    End Function

这样,客户端在接收数据之后,自动以word的形式提示保存,管理员就可以下载该文件自行进行打印处理,这样做的好处是能够减轻服务器的负担,用户对文档的处理有较大的自由度。

2)申报信息校对(Reportverify.aspx

申报信息校对表是保证进入系统的相关数据都是真实可信的,否则本系统也就失去了使用的意义,它是保证所有申报信息的真实性、准确性的重要环节,为此,系统管理员必须在该年度申报的期限内对所有已提交申报的信息进行细致的核对。效果如图12所示。


12  管理员校对申报信息截图

其实现原理是将所有未对的信息查询出来,然后进行批量校对或者单独校对,批量校对工作方式能提高管理员的办公效率,使得申报者能在最短的时间内查询看到自己已申报信息的校对情况,一旦通过校对,申报者将不能再修改自己的申报信息,即使是在申报期限之内。管理校对的具体实现步骤如下:

Private Sub myDataGrid_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles myDataGrid.UpdateCommand

Dim UpdateCmd As String = "Update Report Set Status=@Status where ID=@ID"

Dim MyCommand As OleDbCommand = New OleDbCommand(UpdateCmd, myConnection)

MyCommand.Parameters.Add(New OleDbParameter("@Status", OleDbType.VarChar))

Dim CurrentDropDownList As DropDownList = e.Item.FindControl("DropDownList_status") ' CType(e.Item.Cells(8).Controls(0), DropDownList)

MyCommand.Parameters("@Status").Value=CurrentDropDownList.SelectedItem.Value

MyCommand.Parameters.Add(New OleDbParameter("@ID", OleDbType.Integer))

MyCommand.Parameters("@ID").Value = myDataGrid.DataKeys(CInt(e.Item.ItemIndex)) ' myDataGrid.DataKeys(CType(e.Item.ItemIndex, Integer))

If CurrentDropDownList.SelectedItem.Value = "" Then

       Response.Write("<script>alert('提示:\n\n 请你选择校对情况!');</script>")

Else

            Try

                myConnection.Open()

                MyCommand.ExecuteNonQuery()

                Response.Write("<script>alert('成功:\n\n 本次校对成功!');</script>")

            Catch Ex As OleDbException

                Response.Write(Ex.Message.ToString)

            Finally

                MyCommand.Dispose()

                myConnection.Close()

                myDataGrid.EditItemIndex = -1

                DataGridDataBind()

            End Try

        End If

    End Sub

上面的代码主要是通过使用一个下拉列表控件来实现已校对或未校对两种情况的选择的,凡是校对成功时,管理员能够看到校对结果。

3)申报信息汇总(ReportPostSum.aspx


13 Web方式下打印汇总结果截图

申报信息汇总是得到年度汇总结果的重要手段,本系统提供了两种得到汇总结果的方式,一是像前面所说的那样,直接用Word文档导出下载的方式,另一种是直接通过Web打印的方式实现。下面就后一种实现方法作详细解释,其打印预览效果如图13所示。

其实现原理是借助IE浏览器的WebBrowser控件函数接口来实现打印和打印预览操作。

这里需要借助于一个通用的Web打印类来实现数据的加载和打印输出,核心代码如下。

Imports System.Text

Public Class PrintClass

    Inherits System.Web.UI.Page

'PrintClass类的摘要说明   

'功能:拼出要打印的表

'参数:dsDATASET型,dgDATAGRID

'技术:使用IE浏览器的WebBrowser控件函数接口来实现打印、打印预览操作

'打印 WebBrowser1.ExecWB(6,1)

'打印设置 WebBrowser1.ExecWB(8,1)

'打印预览 WebBrowser1.ExecWB(7,1)

'直接打印WebBrowser1.ExecWB(6,6)

    Public Sub New()

        ' TODO: 在此处添加构造函数逻辑

    End Sub

    Public Overloads Function DGPrint(ByVal ds As DataSet) As String

        Dim myDataTable As New DataTable

        myDataTable = ds.Tables(0)

        Dim myRow As Integer = myDataTable.Rows.Count

        Dim myCol As Integer = myDataTable.Columns.Count

        Dim sb As New StringBuilder

        Dim colHeaders As String = "<html><body>" + "<object ID='WebBrowser' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'VIEWASTEXT></object>" + "<table><tr>"

        For i As Integer = 0 To myCol - 1

        colHeaders += "<td>" + myDataTable.Columns(i).ColumnName.ToString() + "</td>"

        Next i

        colHeaders += "</tr>"

        sb.Append(colHeaders)

        For i As Integer = 0 To myRow - 1

            sb.Append("<tr>")

            Dim j As Integer

            For j = 0 To myCol - 1

                sb.Append("<td>")

                sb.Append(myDataTable.Rows(i)(j).ToString().Trim())

                sb.Append("</td>")

            Next j

            sb.Append("</tr>")

        Next i

        sb.Append("</table></body></html>")

        colHeaders = sb.ToString()

        colHeaders += "<script languge='javascript'>WebBrowser.ExecWB(7,1); window.opener=null;window.close();</script>"

        Return colHeaders

    End Function

End Class

以上代码的本质其实还是调用客户端的功能函数WebBrowser.ExecWB(7,1),实现打印。

4)申报时间设置(ReportTimeSet.aspx

申报时间设置是进行课题申报活动中不可缺少的条件,在每一次申报之前,都必须有管理员设置本年度的申报开始时间和截止时间,以及年度完成课题后的汇报完成情况的开始时间和截止时间。界面如图14所示:


 

   14 管理员申报时间设置

其核心代码如下:

Imports System.Data.OleDb

Imports System.Configuration

Public Class ReportTimeSet

Inherits System.Web.UI.Page

#Region " Web 窗体设计器生成的代码

#End Region

Dim myConnection As OleDbConnection=New

OleDbConnection(ConfigurationSettings.AppSettings("ConnectionStr"))

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim Check As CheckUser = New CheckUser

If (Check.CheckAdmin = "False") Then

Response.Write("<script>alert('抱歉:\n\n您尚未登录,请登录!');location.href('login.aspx');</script>")

End If

If Not Page.IsPostBack Then

LoadMyGrid()

TableModifyPanel.Visible = False

End If

End Sub

Private Sub btAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btAdd.Click

TableSetPanel.Visible = True

TableModifyPanel.Visible = False

End Sub

Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click

Try

If (Calendar_poststart.DateTime).CompareTo(Calendar_postend.DateTime) < 0 Then

If (Calendar_postend.DateTime).CompareTo(Calendar_finishstart.DateTime) < 0 Then

If (Calendar_finishstart.DateTime).CompareTo(Calendar_finishend.DateTime) < 0 Then

Dim mySQL As String = "insert into 

ExpiredTime([year],postStart,postEnd,finishStart,finishEnd)

values(@year,@postStart,@postEnd,@finishStart,@finishEnd)"

                    Dim myCommand As OleDbCommand

                    myCommand = New OleDbCommand(mySQL, myConnection)

myCommand.Parameters.Add(New OleDbParameter("@year", OleDbType.VarChar))

myCommand.Parameters("@year").Value = Select_year.Value

myCommand.Parameters.Add(New OleDbParameter("@postStart", OleDbType.Date))

myCommand.Parameters("@postStart").Value = Calendar_poststart.DateTime

myCommand.Parameters.Add(New OleDbParameter("@postEnd", OleDbType.Date))

myCommand.Parameters("@postEnd").Value = Calendar_postend.DateTime

myCommand.Parameters.Add(New OleDbParameter("@finishStart", OleDbType.VarChar))

myCommand.Parameters("@finishStart").Value = Calendar_finishstart.DateTime

myCommand.Parameters.Add(New OleDbParameter("@finishEnd", OleDbType.VarChar))

myCommand.Parameters("@finishEnd").Value = Calendar_finishend.DateTime

                        Try

myConnection.Open()

myCommand.ExecuteNonQuery()

Response.Write("<script>alert('成功:\n\n本次时间设置成功!')</script>")

Catch ex As OleDbException

Response.Write("<script>alert('提示:\n\n系统中存在该年份的时间设置,请不要重复!')</script>")

Finally

myCommand.Dispose()

myConnection.Close()

LoadMyGrid()

End Try

Else

Response.Write("<script>alert('提示:\n\n[完成]开始时间 不能大于 [完成]截止时间')</script>")

End If

Else

Response.Write("<script>alert('提示:\n\n[申报]截止时间 不能大于 [完成]开始时间')</script>")

End If

Else

Response.Write("<script>alert('提示:\n\n[申报]开始时间 不能大于 [申报]截止时间')</script>")

End If

Catch ex_Times As System.ArgumentOutOfRangeException

Response.Write("<script>alert('提示:\n\n你提交的日期格式不正确,请正确输入日期')</script>")

End Try

End Sub

End Class

 

五、结

数据库备份时没有采用数据压缩技术,由于服务器空间的限制,当数据量增大时,将不允许创建太多的还原点;系统后台的管理菜单采用静态的方法实现,在一定程度上加重了程序开发的负担,在日后的功能扩展时将造成不便;没有考虑到程序的执行效率,在提高应用程序的性能方面做得不够。

以后的改进主要涉及到以下几个方面:提升应用程序的性能和数据的安全性; 进一步美化页面;扩展现有的功能,并为其他应用系统实现有效的协同和集成。

 

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089