在ASP.NET網站中經常使用主版頁面(MasterPage)來製作相同的配置樣式以統一所有頁面的外觀,今作了一個小實驗,以釐清觀念,在套用了主版頁面後,網頁的生命週期是如何進行的。
Step 1:在MasterPage中的後置程式碼中,依序建立PreInit、Init、InitComplete、PreLoad、Load、LoadComplete、PreRender、Render....的事件區塊,再Response.Write() 輸出識別用的字串,如以下code:
在ASP.NET網站中經常使用主版頁面(MasterPage)來製作相同的配置樣式以統一所有頁面的外觀,今作了一個小實驗,以釐清觀念,在套用了主版頁面後,網頁的生命週期是如何進行的。
Step 1:在MasterPage中的後置程式碼中,依序建立PreInit、Init、InitComplete、PreLoad、Load、LoadComplete、PreRender、Render....的事件區塊,再Response.Write() 輸出識別用的字串,如以下code:
NPOI是在.NET上實現DataTable、Excel互轉的利器,工作上我習慣用該組件來實現所需的功能。具體做法可以參考MSDN CodePlex上的說明。我根據gipi大所提供的換行作法,修改了CodePlex上匯出excel部分的程式碼,如下所示 :
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;
using NPOI;
using NPOI.HPSF;
using NPOI.HSSF;
using NPOI.HSSF.UserModel;
using NPOI.POIFS;
using NPOI.Util;
public class DataTableRenderToExcel
{
public static Stream RenderDataTableToExcel(DataTable SourceTable)
{
HSSFWorkbook workbook = new HSSFWorkbook();
MemoryStream ms = new MemoryStream();
HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();
HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);
// handling header.
foreach (DataColumn column in SourceTable.Columns)
headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
// handling value.
int rowIndex = 1;
foreach (DataRow row in SourceTable.Rows)
{
HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);
foreach (DataColumn column in SourceTable.Columns)
{
HSSFCellStyle cs = (HSSFCellStyle)workbook.CreateCellStyle();
cs.WrapText = true; // 設定換行
cs.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.TOP; //文字對齊方式
dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
char[] ch = new char[]{'\n'};
string[] str = row[column].ToString().Split(ch);
if (row[column].ToString().Contains("\n"))
{
dataRow.Cells[column.Ordinal].CellStyle = cs;
dataRow.HeightInPoints = str.Length * sheet.DefaultRowHeight / 20;//計算Cell的高度
}
}
rowIndex++;
}
workbook.Write(ms);
ms.Flush();
ms.Position = 0;
sheet = null;
headerRow = null;
workbook = null;
return ms;
}
public static void RenderDataTableToExcel(DataTable SourceTable, string FileName)
{
MemoryStream ms = RenderDataTableToExcel(SourceTable) as MemoryStream;
FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);
byte[] data = ms.ToArray();
fs.Write(data, 0, data.Length);
fs.Flush();
fs.Close();
data = null;
ms = null;
fs = null;
}
}
最近寫了一支定時執行工作的程式,想在工作結束時將寫入情況、耗費時間寫入到Log檔。無意中發現微軟已經把寫入到Log檔的功能已經包好了,真是佛心來的。
只要透過My.Application.Log.WriteEntry這支function就能寫入到Log檔。而預設的Log檔是存放在一個隱藏的資料夾中:
情境模擬如示意圖 : 點擊GridView上的TextBox後,要帶出ModalPopupExtender,勾選ModalPopupExtender上的選項後再將值寫回Textbox上。
微軟的ajax tool kit有個CalendarExtender控制項可以很方便的產生萬年曆供user選取日期,
也能在後置程式碼中取得選取值。但如果想在前端js中取到選許的日期,就沒那麼容易了。經過努力爬文後,
以往在前端網頁中,利用javascript產生的資料想送回後端,交由後端程式處理時,會利用一個隱藏欄位+一個隱藏按鈕(display:'none'),將資料寫入到隱藏欄位中後,再利用javascript去觸發隱藏按鈕,去執行button_click中的程式,如以下寫法:
<script src="jquery-1.4.4.js" type="text/javascript"></script>
長久以來,我的Visual Studio 2008經常跳出無法啟動程式的錯誤,按了確定後,沒執行偵錯又回到vs2008裡了,爬文許久,終於找到解決方法了 :
1) Open RegEdit