2011年10月7日 星期五

ASP.net SelectParameters的值為空字串 導致 Gridview無法顯示資料內容的解決方式

手動寫分頁 有點麻煩。故大多時候的資料呈現都可利用Gridview加上AccessDataSource等資料控件項來搭配。
但若遇到某個過濾參數來源值為空字串,就會讓 Gridview無法顯示資料內容

假設:有一個組織,區分為 上層單位Unit1與下層單位Unit2
Unit1必有值,Unit2不一定有值。
例如:Unit1為中區分公司,Unit2為行政課,但Unit2也可能為空字串。

下方將Unit1值以Session來過濾條件,Unit2值則以下拉式選單過濾

* 記得在可能有空字串的SelectParameters條件,加設 DefaultValue=" "即可解決問題。


<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:lea_DBcs %>"
ProviderName="<%$ ConnectionStrings:lea_DBcs.ProviderName %>" SelectCommand="SELECT* FROM [DocApply] WHERE ([Unit2] = @Unit2 and [Unit1] = @Unit1 " >
<selectparameters>

<asp:ControlParameter ControlID="DropDownList1" DefaultValue=" "
Name="Unit2" PropertyName="SelectedValue" Type="String" />

<asp:SessionParameter SessionField="Unit1" Name="Unit1" Type="String" />
</SelectParameters>

2011年8月24日 星期三

ASP.net 網頁以ashx取回之圖片連結無法正常顯示解決方式



雖然不一定最好的解決方式,但還是有點用

若剛將圖片上傳上去,並以AJAX搭配後端的ASHX取得含圖片連結的資料時
可能因為網頁快取的原因,圖片會無法正常顯示。


將App_Code這個目錄內的資料更新,強迫更新
FTP重新整理資料夾

這樣好像就OK了


2011年7月9日 星期六

[ Asp.Net ] 以ashx上傳XML檔案(不存檔)配合xsd驗證及讀取資料

程式碼片段  LoadXm..ashx

           '以 StreamReader 取得該檔案!
            Dim XmlFile As New System.IO.StreamReader(context.Request.Files(0).FileName)
            Dim xmlContent As String = XmlFile.ReadToEnd()
            Dim xmlStringReader As System.IO.StringReader = New System.IO.StringReader(xmlContent)



           ' 建立 XmlSchemaSet
            Dim sc As XmlSchemaSet = New XmlSchemaSet()
            sc.Add("", context.Server.MapPath("Your.xsd"))
            '設定validation settings.
            Dim settings As XmlReaderSettings = New XmlReaderSettings()
            settings.ValidationType = ValidationType.Schema
            settings.Schemas = sc
            AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
           
           '驗證上傳後的檔案
            Dim reader As XmlReader = XmlReader.Create(xmlStringReader, settings)
             While reader.Read()
                    ......................
            End While

.net ADOX 為現有的MDB資料表增加欄位

上網找了MSDN的範例,不過都不是自己要的,我的需求是在現存的資料表增加欄位。
因在Web上增加欄位,非主機端還是用Code來操作會比較簡單。
Code在下面,提供大家參考,適合自己需求的 要再改一下。

記得先加入參考[Microsoft ADO Ext. 2.8 for DDL.....]
然後引用
 IMPORTS   ADOX


直接呼叫下列程序
  Add_ColumToExistMdb("資料表名稱", "要增加的資料欄位", "資料型態(自行定義)")

'增加 資料庫 欄位 ()
    Sub Add_ColumToExistMdb(ByVal TableName As String, ByVal ColName As String, ByVal ColType As String)
        'TableName 資料表名稱
        'ColName 欄位名稱
        'ColType 欄位型態
        Dim Cn = New ADODB.Connection
        Cn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Application.Info.DirectoryPath & "\My.mdb")
        Dim cat As New ADOX.Catalog
        Dim tbl As New ADOX.Table
        Dim xCol As New ADOX.Column
        Dim blnColAlreadyExist As Boolean = False '判斷欄位是否存在的


        Dim TranCode As Integer  '轉換後的數字Enum
        cat.ActiveConnection = Cn
        tbl = cat.Tables(TableName) '針對現存的表格來做增加欄位的動作!
        '在增加特定欄位前先偵測[欄位名稱]是否存在?
        For Each xCol In tbl.Columns
            'Debug.Print(xCol.Name.ToString)
            If xCol.Name = ColName Then
                blnColAlreadyExist = True
                Exit For
            End If
        Next
        '欄位沒有重複!
        If blnColAlreadyExist = False Then
            Select Case ColType '自訂欄位定義....
                Case "long"
                    TranCode = 4 'DataTypeEnum.adSingle

            End Select
            '增加欄位
            tbl.Columns.Append(ColName, TranCode)
            cat.Tables.Refresh()
        End If

        Cn.Close()
        Cn = Nothing


    End Sub

2011年7月3日 星期日

.net 將既有的xml轉換為xsd檔案

在Visual Studio 安裝的目錄下,尋找xsd.exe檔案
找到之後,使用 [命令提示字元]
直接輸入 xsd [檔名ABC]
 在同一個目錄下,就會產生同名的ABC.xsd

相關的語法使用,可參考以下網址
http://msdn.microsoft.com/zh-tw/library/x6c1kb0s%28v=vs.80%29.aspx

JavaScript 物件長度或陣列長度的取法

經測試
物件長度 要用迴圈方式累加取得cnt

for (var obj in ObjS) {
  cnt+=1;
}

陣列長度,直接以length取得,歸零用length=0

2011年5月21日 星期六

JavaScript 綜合各家的壓縮評比網站The JavaScript CompressorRater

若您遇到Javascript程式碼太長,需要壓縮時節省網站流量時
且又不知道哪一種工具的結果比較好,可以到以下的網站
JavaScript Compressor and Comparison Utility.
http://compressorrater.thruhere.net/

他不但可以告訴你哪一個工具表現得比較好(壓縮率)
共有JSMin、Dojo、ShrinkSafe、YUI Compressor、Packer、gzip這幾個工具
你還可以取得壓縮後的結果。

極力推薦~~~~~

請注意~
若您要將現有可以運作的程式碼直接壓縮,請注意若裡面有全域變數,建議儘量選擇將個別的函示壓縮後的程式碼不獨立出去一個js檔,以免發生錯誤。
當然,若有時間,還是獨立成為一個JS檔比較有彈性。
但省事的話,這樣一樣有效果的。

2011年5月12日 星期四

[ json.net ] 將json物件格式轉回字串

'利用 Josn.Net 寫入字串

' ThisWUnitDoc 某已利用 Josn.Net 轉成之物件

Dim MyJsonSerializer As New JsonSerializer
Dim sb As New StringBuilder
Dim sw As New StringWriter(sb)
Dim MyJsonTextWriter As New JsonTextWriter(sw)

MyJsonSerializer.Serialize(MyJsonTextWriter, ThisWUnitDoc)
NewV = sb.ToString

[ .net ] split 函數 以字串分割,而非字元分割的使用方式

一般而言,split函數多以字元來做切割。例如:逗號、分號等[單一]字元。
若直接使用字串,例如:++ -- <> 等一個以上的字元時,要使用該方法的另一個多載

參考來源:http://msdn.microsoft.com/zh-tw/library/tabh47cf.aspx
'待比對字串
Dim source As String = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]"
' 要切割的字串清單
Dim stringSeparators() As String = {"[stop]"}
'回傳結果的字串陣列
Dim result() As String

'執行
result = source.Split(stringSeparators, StringSplitOptions.None)

For Each s As String In result
Console.Write("'{0}' ", IIf(String.IsNullOrEmpty(s), "<>", s))
Next

'

2011年5月9日 星期一

[IE6 ] 框架frameset 呈現空白無法顯示解決

因專案開發必須顧及IE6的使用者
且有frameset的框架切割顯示,某日突然間不能使用。
但用其他電腦則正常,FF瀏覽器觀看也正常
找了許多網站也不見效果
最後,懷疑可能是瀏覽器當掉了,故想試試看重設看看

使用以下指令

(工具/網際網路選項/進階/還原成預設值 )

再查看,結果網頁就顯示正常,提供參考。

有時候這個解決方式仍會不成功,但最近操作OK的一次
是還原後,立刻查看,若成功就是成功,不成功多試幾次,可能會成功...
至少目前是這個樣子.....。

2011年5月8日 星期日

[Access ] .net 時間 24小時制的問題

寫入Access 資料庫 查詢語法,若有between and 造成查詢語法的日期錯誤
可以將寫入時間改成 24小時解決問題
例如
Dim NowTime As Date = Now.ToString
NowTime.ToString("yyyy/MM/dd HH:mm:ss")

where ( [LastUpdateTime] between #" & pastTime.ToString("yyyy/MM/dd HH:mm:ss") & _
"# and #" & NowTime.ToString("yyyy/MM/dd HH:mm:ss") & "#) "

2011年5月7日 星期六

[ IE6 PNG問題 ] 修正的解決方案

資料來源:
http://blog.miniasp.com/post/2008/07/20/Fix-IE-PNG-Transparency-Problem-in-IE-5-6.aspx

作者提到三個方法 
# Universal transparent-PNG enabler for MSIE/Win 5.5+
# IE PNG Fix v1.0 / 2.0 Alpha 2
# ie7-js

由於專案是新的,故直接使用 ie7-js
http://code.google.com/p/ie7-js/

1.下載後直接將檔案解壓縮後,IE7.js拷貝到目錄
(若不拷貝也可直接引用線上的。)
2.在<head>區塊內增加以下程式碼,視要採用的方式來決定src位置
<!--[if lt IE 7]><script src="src="Scripts\IE7.js"></script>
<![endif]-->

<!--[if lt IE 7]><script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE7.js"></script>
<![endif]-->

[ Asp.Net ] CKEditor HTML編輯器

下載位置
http://ckeditor.com/download

傻瓜都會用的步驟說明。
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/ASP.NET/Integration_Beginners
Absolute Beginner's CKEditor for ASP.NET Control Integration Guide

ckeditor的內容讀、寫與插入
引用網址:http://note.tcc.edu.tw/604.html

要操作 ckeditor 的內容,使用 instance 的方法,若textarea 的id="desc"。
讀取內容
var ct= CKEDITOR.instances.desc.getData();

寫入內容
CKEDITOR.instances.desc.setData( "Insert value" ) ;

這裡寫入的內容會注入到原始碼,所有帶有HTML的tags可以生效

取得焦點
CKEDITOR.instances.desc.focus();

插入內容
CKEDITOR.instances.desc.insertHtml( "insert value" ) ;

執行命令
var ct= CKEDITOR.instances.desc;
ct..execCommand('bold');
ct.execCommand('forecolor',false,'#00ff00');
ct.execCommand('JustifyCenter', false, null);
ct.execCommand('fontsize', false, 15);
  
參考資料

CKEditor 官網 http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html
CKEditor捉取、設定內容 http://www.dotblogs.com.tw/bowwowxx/archive/2010/04/01/14349.aspx 這裡有js的striptags 方法
CKEditor API-Ticket http://dev.ckeditor.com/attachment/ticket/4254/api.html
CKEditor 的插件開發 http://bbish.net/01toturial/44/ckeditor-



微軟的ASP.NET AJAX Control tooklit HTML Editor
http://studyhost.blogspot.com/2010/07/aspnet-ajaxhtml.html

2011年4月29日 星期五

[Regex] Regex的迷思,完全比對的作法假設

Regex在比對文件內容時,一般都是將符合規則的過濾出來。
但若想要做到完全比對。則必須用一點小技巧。

把待檢測的字串中有符合的規則的字串取代掉,若還有剩下或多餘的字元,就代表有問題。
此可以避免符合規則下的迷思

因一般來說,我們會用isMatch=true 來取得符合規則的部分
但即使規則正確,但並非完全正確的情形卻不可避免

Public gloWUnitPattern As New Regex("臺灣\d{6}公司")

If DetectExtraInformationForRegex(待測字串, gloWUnitPattern規則) <> 0 Then

End If


'偵測符合Regex格式,但仍有多餘的資訊,需列為必改資料!!
' Public Function DetectExtraInformationForRegex(ByVal s As String, ByVal RegexPattern As String) As Integer
Public Function DetectExtraInformationForRegex(ByVal s As String, ByVal rgx As Regex) As Integer

'Dim rgx As New Regex(RegexPattern)
Dim MatchCount As Integer = 0

For Each match As Match In rgx.Matches(s)
s = s.Replace(match.Value, "")
MatchCount += 1
Next
'若沒有成功 就寫入某字串,讓長度不等於0
If MatchCount = 0 Then
s &= "X"
End If

Return s.Length '回傳值 若不為0 就可能有錯誤!


End Function

[Asp.net ] 使用AccessDataSource控制項,SQL語法的Rnd亂數無法使用

要使用Rnd() 做隨機文章的效果

SqlCmd = " SELECT TOP 7 * FROM [" & SQLTB & "] WHERE VIS = 1 order by Rnd(" & SortCol & ")

使用AccessDataSource控制項,SQL語法的Rnd亂數無法使用
請改用OleDbConnection OleDbCommand等,就可以正常了

2011年4月26日 星期二

2011年2月6日 星期日

正確已用外部的js檔案

下面這個無法正常使用
//<script type="javascript" src="Scripts\datetimepicker.js"> 

下面這個可以正常使用,差別在於 text/javascript
//<script type="text/javascript" src="Scripts\datetimepicker.js">


ps:但有時候會有些例外情形。

VS2010 選擇以特定的瀏覽器偵錯顯示

1.在右側方案總管視窗中,任選一個頁面,按下右鍵
2.選擇[瀏覽方式(H)]
3.將慣用的瀏覽器設定成[預設]即可

追蹤者