2013年9月26日 星期四

[ASP.NET/AjaxToolKit] 使用CalendarExtender遇到問題紀錄

紀錄一下,使用上遇到的問題:

1. 找不到任何適用特定文化特性或中性文化特性的資源。請確定您已在編譯時期正確地將 "AjaxControlToolkit.Properties.Resources.resources" 嵌入或連結至組件 "AjaxControlToolkit" 中,或所有需要的附屬組件均為可載入且已完整簽署。

Ans: 無加入ToolkitScriptManager或ScriptManager控制項。

2. 加入ToolkitScriptManager控制項後,發生MasterPage的JavaScript或JQuery運作不正常

做法:
1. 在ScriptManager或ToolkitScriptManager控制項加上ScriptMode="Release",此屬性用來決定用戶端指令碼程式庫該使用debug抑或Release的版本,ScriptMode預設為Auto,會跟著web.config的deployment retail的屬性走,預設為false,因此ScriptMode="Debug"。AjaxToolKit官網也建議將ScriptMode="Release",http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/ToolkitScriptManager/ToolkitScriptManager.aspx

//xxx.aspx
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" ScriptMode="Release"></asp:ToolkitScriptManager>
<asp:TextBox ID="txtDate" runat="server"></asp:TextBox>        
<asp:CalendarExtender ID="txtDate_CalendarExtender" runat="server" Enabled="True" TargetControlID="txtDate"></asp:CalendarExtender>

2. 也可能是以下板友列出的原因:
http://social.msdn.microsoft.com/Forums/zh-TW/81016eba-6e82-479a-b426-fc53f8b1f3ac/calendarextender-


參考資料
http://weblogs.asp.net/lorenh/archive/2008/02/15/speed-up-load-time-of-ajax-control-toolkit-controls-while-debugging.aspx
http://msdn.microsoft.com/zh-tw/library/system.web.ui.scriptmanager.scriptmode.aspx
http://msdn.microsoft.com/zh-tw/library/ms228298.aspx

2013年9月25日 星期三

[C#] Math.Round/Ceiling/Floor用法

說明:
.NET Framework 中的 Round 方法會執行「四捨六入五成雙」(Banker's Rounding),將結尾為 .5 的數字捨入或進位為最接近的偶數,而不是下一個較高的位數。

例如,2.5會捨入為 2,而 3.5 會進位為 4 (當資料交易很大時,此法有助於避免系統性地偏向較高位數的值)。

因此:
Math.Round方法有提供MidpointRounding列舉型別:
//當某個數字剛好位於另外兩個數字之間的中點時,將其捨入成為距離最近的偶數。
ToEven = 0,
//當某個數字剛好位於另外兩個數字之間的中點時,朝向遠離零的方向將其捨入成距離最近的數字。
AwayFromZero = 1,

選擇AwayFromZero即是我們熟知的算術四捨五入,
Math.Round(2.5, 0, MidpointRounding.AwayFromZero) = 3。

P.S. 
在 T-SQL 中,Round函式則會一律往遠離 0 的方向捨入。因此 2.5 會捨入為 3,
但Round(0.5, 0)會出現「轉換 expression 到資料類型 numeric 時發生算術溢位錯誤。」
這應該是因為0.5的資料類型是numeric(1, 1),進位後為1.0導致有效位數不夠。
因此Round(0.4, 0)不會有錯誤。

可使用Round(CAST (0.5 AS numeric(2,1)), 0)增加有效位數或使用字串類型做處理(Round('0.5', 0))



參考資料:
http://www.dotblogs.com.tw/jeff-yeh/archive/2009/06/15/8834.aspx
http://msdn.microsoft.com/zh-tw/library/ms131274(VS.80).aspx
http://msdn.microsoft.com/zh-tw/library/bb882648(v=vs.90).aspx

http://sharedderrick.blogspot.tw/2009/06/round-sql-server-2008.html

http://www.dotblogs.com.tw/jaigi/archive/2011/05/11/24822.aspx


[ASP.NET] 在GridView的footer產生小計

說明:有一GridView1如下
月份 薪水
1       22000
2       22000
3       22000
...      ...
12     22001

不透過sql匯總,想在GridView的footer顯示薪水總和該怎麼做?


作法:
在RowDataBound事件中將數據做匯總,再顯示在footer中。

//xxx.aspx
<GridView ID="GridView1" ShowFooter="True">
</GridView>

//xxx.aspx.cs
   protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        int iSumSalary = 0;

        foreach (GridViewRow gvr in GridView1.Rows)
        {
            iSumSalary += Convert.ToInt32(gvr.Cells[1].Text);
        }

        if (e.Row.RowType == DataControlRowType.Footer)
        {
            e.Row.Cells[0].Text = "合計";
            e.Row.Cells[1].Text = iSumSalary.ToString();
        }
    }

參考資料:
http://www.dotblogs.com.tw/puma/archive/2008/10/17/5713.aspx
http://bibby.be/2009/01/gridview.html

2013年9月17日 星期二

[ASP.NET] 使用DataTable撈Date型別的資料會出現時分秒的解決方式

說明:
使用DataTable抓取T-SQL中資料類型為Date的欄位,日期會出現上午12:00:00。

解決方式:
1. string.format("{0: yyyy/MM/dd}", dt.Rows[index]["Date"]);
2. Convert.ToDateTime(dt.Rows[index]["Date"]).ToString("yyyy/MM/dd");
1.2項適用於直接顯示在TextBox或Lable控制項上

3. <asp:BoundField DataField="Date" DataFormatString="{0:yyyy/MM/dd}" />
4. Text='<%# Eval("Date", "{0:yyyy/MM/dd}") %>'
3.4項適用於繫結至GirdView上

2013年9月9日 星期一

[ASP.NET] 直向顯示GridView

說明:一般GridView顯示格式如下:
身份證字號 | 姓名 | 生日
A123456789  A        70/01/01
B123456789  B         90/12/31

若想換成直向顯示,該怎麼做?
身份證字號: A123456789  
姓名: A
生日: 70/01/01
身份證字號: B123456789  
姓名: B
生日: 90/01/01

解法:
可使用GridView的TemplateFiled,如:

//xxx.aspx
<GridView>
    <Columns>
        <asp:TemplateFiled>
         <ItemTemplate>
            <table>
                <tr>
                    <td><asp:Label ID="lblID" runat="server" Text="身份證字號"></asp:Label></td>
                     <td><asp:TextBox ID="txtID" runat="server" Text='<%# Eval("ID") %>'>                     </asp:TextBox></td>
                 </tr>
                 <tr>
                      <td><asp:Label ID="lblName" runat="server" Text="姓名"></asp:Label></td>
                      <td><asp:TextBox ID="txtName" runat="server" Text='<%# Eval("Name") %>'>                                               </asp:TextBox></td>
                  </tr>
                  <tr>
                      <td><asp:Label ID="lblBirthday" runat="server" Text="生日"></asp:Label></td>
                      <td><asp:TextBox ID="txtBirthday" runat="server" Text='<%# Eval("Birthday") %>'>                                       </asp:TextBox></td>
                   </tr>
            </table>
          </ItemTemplate>
         </asp:TemplateFiled>
    </Columns>
</GridView>

//xxx.aspx.cs
pivate void Bind()
{
    GridView.DataSource = 資料來源;
    GridView.DataBind();
}

參考資料:
http://social.msdn.microsoft.com/Forums/zh-TW/b6d70080-3abb-4223-a2cc-1d1177cd6db4/gridview



[SQL] 自動產生主鍵刪除資料後,主鍵不中斷的小技巧

說明:table內PK為自動產生(SELECT ISNULL(MAX(PK_No), 0) FROM table),現該table有3筆資料,user刪掉第2筆資料,又不想畫面顯示PK_No為1跟3(PK_No中斷)。

解法:
在刪除該table資料後,加上UPDATE table SET PK_No -= 1
                                        WHERE PK_No > 此次刪除的PK_No;

參考資料:
http://www.360doc.com/content/10/0630/19/1554013_36145260.shtml