MS.net 开发点滴

来源:互联网 发布:部门考核数据流程图 编辑:程序博客网 时间:2024/04/28 22:20

第一次使用ASP.NET技术开发项目,记录一下值得记录的东西,方便以后参考。

1.Asp.net中的Session,Cache等用的都是地址传递,哪怕是画面间的。

  比如A画面在SESSION里存了A对象,B画面取出A对象,对其修改后,那么A画面再取这个SESSION时,发现A对象已经被修改。哪怕是换一个KEY也无济于事。这一点和JSP开发很不一样,用起来很不好。

 

2.updatepanel的简单应用。

 异步提交注意事项:需要使用<asp:AsyncPostBackTrigger

   <asp:UpdatePanel ID="ApplyPanel" runat="server"UpdateMode="Conditional"ChildrenAsTriggers="False">

    <Triggers>

         <asp:AsyncPostBackTriggerControlID="ModeList"/>  //异步

        <asp:PostBackTriggerControlID="apply"/>        //同步
     </Triggers>

 

3.dialog子画面只执行一次pageload的解决方法。

   Response.CacheControl ="no-cache"

 

4.复杂动态表格尽量使用<asp:Table ID="tGrid"runat="server"。。。在后台表格构建。

  sample:

       '一覧データを取得
       Dim sourceDataDT As DataTable =logic.getSourceDataList(currentDetailInfo, mode, fromYe,toYe)
       While idx < sourceDataDT.Rows.Count - 1
           Dim dr As DataRow = sourceDataDT.Rows(idx)
           'Dim sourceDataInfo As ShowDataInfo = sourceDataList(idx)
           Dim subSelWh As String = "Maker = " &CommonUtil.StrChange(dr("maker").ToString.Trim) & "and model = " &CommonUtil.StrChange(dr("model").ToString.Trim)
           If CommonUtil.IsNotEmpty(dr("year").ToString) Then
               subSelWh = subSelWh + " and year=" &CommonUtil.StrChange(dr("year").ToString.Trim)
           End If
           If CommonUtil.IsNotEmpty(dr("extCode").ToString) Then
               subSelWh = subSelWh + " and extCode=" &CommonUtil.StrChange(dr("extCode").ToString.Trim)
           End If
           If CommonUtil.IsNotEmpty(dr("extColor").ToString) Then
               subSelWh = subSelWh + " and extColor=" &CommonUtil.StrChange(dr("extColor").ToString.Trim)
           End If
           'subSelWh = subSelWh + " and year=" &CommonUtil.StrChange(dr("year").ToString.Trim) & "and extCode=" &CommonUtil.StrChange(dr("extCode").ToString.Trim)
           'subSelWh = subSelWh + " and extColor=" &CommonUtil.StrChange(dr("extColor").ToString.Trim)
           Dim rowSpan As Int16 = sourceDataDT.Select(subSelWh).Length
           'item作成
           tr = New TableRow
           td = New TableCell
           'Year
           td.Text = dr("year").ToString.Trim
           td.CssClass = "grid_cell1"
           td.RowSpan = rowSpan
           tr.Cells.Add(td)

5.动态加载javascript

  注意事项:需要写在If Not IsPostBackThen外面,因为只需执行一次即可。

 

 Protected Sub showdata_Load(ByVal sender AsObject, ByVal e As System.EventArgs) Handles showdata.Load
       'javascript function作成
       Dim j As String
       j = ""
       j += "function itemClick(detailRecId) {"

       j += "document.getElementByIdx_x('" &Me.txtCurrentItemValueId.ClientID & "').value =detailRecId ;"

       j += "document.getElementByIdx_x('" &Me.apply.ClientID & "').click();"
       j += "} "

       ClientScript.RegisterClientScriptBlock(Me.GetType, "j1", j, -1)

 

在动态加载的table里就可以这样引用这个javascript
           td.Text = "<img alt=''src='images/item.bmp'/><aclass='clinkbutton2' onclick='javascript:itemClick("& detailInfo.DetailRecId &");'>" & itemLabel &"</a>"

 

6.Excel文件做成并download

原理:其实就是循环遍历<asp:table的全部行/列,把内容写到EXCEL文件里。

需要引入第三方控件 【org.in2bits.MyXls】

Protected Sub cmdExcel_Click(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles cmdExcel.Click

       Dim dt As DataTable, dr As DataRow
       Dim s As String = "", i As Integer, j As Integer, x As Integer, yAs Integer

       Dim wb As New org.in2bits.MyXls.XlsDocument

       wb.FileName = "Export.xls"

       Dim w As org.in2bits.MyXls.Worksheet =wb.Workbook.Worksheets.Add(txtCurrentItemValue.Text& " Data")

       Dim cc As Integer = 1


       bindPage(hidFrom.Value, hidTo.Value)

       Dim td As TableCell
       Dim tr As TableRow
       Dim t As org.in2bits.MyXls.Cell, p As org.in2bits.MyXls.Cell
       Dim c As org.in2bits.MyXls.Cells

       dt = New DataTable
       i = 0
       Do Until i = 20
           dt.Columns.Add(i.ToString)
           i = i + 1
       Loop

       i = 0
       Do Until i = tGrid.Rows.Count
           i = i + 1
           dr = dt.NewRow

           j = 0
           Do Until j = 20
               dr(j) = "0"
               j = j + 1
           Loop

           dt.Rows.Add(dr)
       Loop

       c = w.Cells

       i = 0

       For Each tr In tGrid.Rows

           j = 0

           For Each td In tr.Cells

               If dt.Rows(i)(j) = "0" Then
                   dt.Rows(i)(j) = Me.StripHTML(td.Text.ToString.Trim)
               Else
                   x = 0
                   Do Until x = 1
                       If dt.Rows(i)(j) = "0" Then
                           dt.Rows(i)(j) = Me.StripHTML(td.Text.ToString.Trim)
                           x = 1
                       Else
                           j = j + 1
                       End If
                   Loop
               End If


               If td.ColumnSpan > 1 Then
                   x = td.ColumnSpan
                   y = 1
                   Do Until x = y
                       y = y + 1
                       j = j + 1
                       dt.Rows(i)(j) = "1"
                   Loop

               End If

               If td.RowSpan > 1 Then
                   x = td.RowSpan
                   y = 1
                   Do Until x = y
                       dt.Rows(i + y)(j) = "1"
                       y = y + 1
                   Loop
               End If

               j = j + 1

           Next

           i = i + 1

       Next

       i = 0

       For Each tr In tGrid.Rows

           j = 0

           For Each td In tr.Cells

               x = 0

               Do Until x = 1
                   If dt.Rows(i)(j).ToString <> "1"Then
                       x = 1
                   Else
                       j = j + 1
                   End If
               Loop

               t = c.Add(i + 1, j + 1, Me.StripHTML(td.Text.ToString.Trim))

               Select Case td.CssClass

                   Case "grid_headcell"
                       ExB0(t)

                   Case "grid_chcell", "grid_chcell1"
                       ExB0(t)

                   Case "grid_cell1"
                       ExB1(t)

                   Case "grid_cell_g1", "grid_cell_g1"
                       ExB2(t)

                   Case Else
                       ExB1(t)

               End Select

               If td.HorizontalAlign = HorizontalAlign.Right Then
                   t.HorizontalAlignment =org.in2bits.MyXls.HorizontalAlignments.Right
               End If


               j = j + 1

           Next

           i = i + 1

       Next

 

       Dim ci As org.in2bits.MyXls.ColumnInfo

       ci = New org.in2bits.MyXls.ColumnInfo(wb, w)
       ExC1(ci, 1, 5000)
       w.AddColumnInfo(ci)

       ci = New org.in2bits.MyXls.ColumnInfo(wb, w)
       ExC1(ci, 2, 5000)
       w.AddColumnInfo(ci)

       ci = New org.in2bits.MyXls.ColumnInfo(wb, w)
       ExC1(ci, 3, 5000)
       w.AddColumnInfo(ci)

       ci = New org.in2bits.MyXls.ColumnInfo(wb, w)
       ExC1(ci, 4, 5000)
       w.AddColumnInfo(ci)

       ci = New org.in2bits.MyXls.ColumnInfo(wb, w)
       ExC1(ci, 5, 3000)
       w.AddColumnInfo(ci)

       ci = New org.in2bits.MyXls.ColumnInfo(wb, w)
       ExC1(ci, 6, 3000)
       w.AddColumnInfo(ci)

       ci = New org.in2bits.MyXls.ColumnInfo(wb, w)
       ExC1(ci, 7, 3000)
       w.AddColumnInfo(ci)

       ci = New org.in2bits.MyXls.ColumnInfo(wb, w)
       ExC1(ci, 8, 3000)
       w.AddColumnInfo(ci)

       ci = New org.in2bits.MyXls.ColumnInfo(wb, w)
       ExC1(ci, 9, 3000)
       w.AddColumnInfo(ci)

       ci = New org.in2bits.MyXls.ColumnInfo(wb, w)
       ExC1(ci, 9, 3000)
       w.AddColumnInfo(ci)

       wb.Send()
       Response.Flush()
       Response.End()

 

   EndSub


原创粉丝点击