第一次使用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' οnclick='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