顯示具有 NET 標籤的文章。 顯示所有文章
顯示具有 NET 標籤的文章。 顯示所有文章

2014年8月29日 星期五

無條件捨去至小數兩位並補足位數

 (Math.Truncate(the_rate*100)/100).ToString().PadRight(4,'0');

幾種四捨五入的差別如下,主要是在負數會有差異
-3        -2        -1         0         1         2         3
 +--|------+---------+----|----+--|------+----|----+-------|-+
    a                     b       c           d            e

                       a=-2.7  b=-0.5  c=0.3  d=1.5  e=2.8
                       ======  ======  =====  =====  =====
Floor                    -3      -1      0      1      2
Ceiling                  -2       0      1      2      3
Truncate                 -2       0      0      1      2
Round (ToEven)           -3       0      0      2      3
Round (AwayFromZero)     -3      -1      0      2      3

但不管哪一種都是作用到整數位
所以如果需要針對小數後兩位就需要先*100再/100

.PadRight,避免4.70變成4.7,就是一個補足位數的概念
.PadLeft是在字串左邊補0

2013年11月11日 星期一

Crystal Report 排序問題

有時候會多一頁有時候會跳號亂排
建議在C#端先處裡好

λ的寫法大概是...
A= A.OrderBy(o => o.aNo).ThenBy(o => o.bNo).ToList();

這樣,記得要A=Axxxx這樣排序才會生效

.rpt檔那邊就全部調成「依原始順序」
盡量不要勾「群組保持在一起」否則可能會出現空白頁之類的問題...

但如果真的要勾,盡量挑一個就好


2013年7月9日 星期二

LinQ常用語法速記

參考網址參考網址

from X in XXX
where 條件
group X by new { 要群組的欄位 } into g
from Xx in g.DefaultIfEmpty()
orderby {要遞增排序的欄位}
select new
{
    X.zzz,
    Xx.xxx(經過群組的欄位),
     DateType = X.xx == "A" ? "1~30" :
                     X.xx == "B" ? "31~60" :""(Case when)
}

      #region 用Count()得出查詢結果的個數
        var langCount = (from s in GetStudents()
                           select s.Language)
                           .Distinct()
                           .Count();
        var ageCoun = (from s in GetStudents()
                          select s.Age)
                          .Count(a=>a>22);
        #endregion

        #region 用Sum()將查詢結果相加
        var ageSum = (from s in GetStudents()
                      select s.Age)
                       .Sum();
        //var ageSum = GetStudents().Sum(s=>s.Age);
        #endregion

        #region 用Min()得出查詢結果的最小值
        var ageMin = (from s in GetStudents()
                      select s.Age)
                       .Min();
        //var ageMin = GetStudents().Min(s => s.Age);
        #endregion

        #region 用Max()得出查詢結果的最大值
        var ageMax = (from s in GetStudents()
                      select s.Age)
                       .Max();
        //var ageMax = GetStudents().Max(s => s.Age);
        #endregion

        #region 用Average()得出查詢結果的平均值
        var ageAverage = (from s in GetStudents()
                      select s.Age)
                      .Average();
        //var ageAverage = GetStudents().Average(s => s.Age);
        #endregion


2013年5月28日 星期二

HyperLinkField 針對特定情況不啟用超連結

protected void gvData_DataBound(object sender, EventArgs e) { for (int i = 0; i < gvData.Rows.Count; i++) { //HyperLinkField 所在column HyperLink h1 = (HyperLink)gvData.Rows[i].Cells[0].Controls[0]; h1.Enabled = false; } }

2013年5月14日 星期二

資料換行問題

參考資料

在儲存資料的時候會使用換行,一般來說我總是希望我在哪裡換行的
存完之後展示的資料要跟我輸進去的一樣

在讀取的時候用這樣
A.Text = DBValue.Replace("\n", "<br />");
或是
A.Text = DBValue.Replace("\r\n", "<br />");

在GridView裡面的時候這樣表示
e.Row.Cells[2].Text = e.Row.Cells[2].Text.Replace("\n", "<br />");


儲存的時候相反
DBValue= A.Text.Replace( "<br />","\n");
DBValue= A.Text.Replace( "<br />","\r\n");

2013年4月3日 星期三

Gridview在沒有值的時候顯示Header 和Footer列

我的方法比較陽春,如果判斷資料來源沒有值,我就會塞一組假資料
這樣就會顯示Header和Footer了

噓你馬...虛擬碼長這樣

if(資料來源>0)
{//正常塞資料}
else
{//塞假資料
  //把假資料隱藏起來
  gvData.Rows[0].Visible = false;}

好這樣看起來就跟真的一樣了科科
一定要隱藏假資料那行喔不然看起來會怪怪的

收工
我看大家的方法都好複雜的說

2013年3月6日 星期三

最後一行不見了

話說我今天在組資料,發現Gridview的TemplateField最後一行老是不見了
那是一個超連結,我需要它在空的時候自動顯示某個網址

它不見了我很困擾...
找半天是我自己給掰,在gvData_RowDataBound的事件多了一個判斷式
e.Row.RowType == DataControlRowType.DataRow

拿掉OK了

2013年1月16日 星期三

合併儲存格效果

因為用SQL很慢,用.NET比較快


 public void combineRow()
    {
        for (int i = 0; i < Gridview1.Rows.Count; i++)
        {
            Label lblTime = (Label)Gridview1.Rows[i].FindControl("lblTime");
            if (i > 0)
            {
                Label oldlblTime = (Label)Gridview1.Rows[i-1].FindControl("lblTime");
                if (Gridview1.Rows[i].Cells[0].Text == Gridview1.Rows[i - 1].Cells[0].Text
&& Gridview1.Rows[i].Cells[1].Text == Gridview1.Rows[i - 1].Cells[1].Text)
                {
                    if (oldlblTime.Text.Length == 0)//第一個比對值,取BoundField資料
                    {
                        lblTime.Text += Gridview1.Rows[i - 1].Cells[2].Text + oldlblTime.Text + "," + Gridview1.Rows[i].Cells[2].Text;
                    }
                    else
                    {
                        lblTime.Text +=  oldlblTime.Text + "," + Gridview1.Rows[i].Cells[2].Text;
                    }
                    Gridview1.Rows[i-1].Visible = false;

                }
            }

        }
    }


 private void AddData()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("date");
        dt.Columns.Add("class");
        dt.Columns.Add("hour");
        dt.Rows.Add(new object[] { "Mon", "HandMAke", "1" });
        dt.Rows.Add(new object[] { "Mon", "HandMAke", "2" });
        dt.Rows.Add(new object[] { "Mon", "HandMAke", "3" });
        dt.Rows.Add(new object[] { "Tur", "BookSearch", "2" });
        dt.Rows.Add(new object[] { "Tur", "BookSearch", "3" });
        dt.Rows.Add(new object[] { "Fri", "Yoga", "7" });
        dt.Rows.Add(new object[] { "Fri", "Yoga", "8" });
        dt.Rows.Add(new object[] { "Fri", "Yoga", "9" });
        dt.Rows.Add(new object[] { "Fri", "Yoga", "10" });

        Gridview1.DataSource = dt;
        Gridview1.DataBind();


        combineRow();
    }

2013年1月10日 星期四

子母視窗傳值

參考網址參考網址
母視窗GridView按下查詢,跳出新視窗選取值後送回母視窗特定地方的GridView

2013年1月8日 星期二

後台操作gridview中 hyperlinkfield

參考網址


       protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                HyperLink hl = (HyperLink)e.Row.Cells[0].Controls[0];
                if (hl.Text.Length > 20)//設定條件
                {
                    hl.Enable=false;
                }
            }
        }

2012年12月12日 星期三

2012年10月19日 星期五

DateTime運算

參考網址


  • DateTime.AddYears()
  • DateTime.AddMonths()
  • DateTime.AddDays()
  • DateTime.AddHours()
  • DateTime.AddMinutes()
  • DateTime.AddSeconds()
  • DateTime.AddTicks() // 刻度,單位為 100 亳微秒
  • DateTime.AddMilliseconds() // 加亳秒 (ms)

彈出視窗相關程式碼

參考網址
using System.Windows.Forms;


DialogResult myResult = MessageBox.Show("內容", "標題", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
//第一個參數是視窗內容訊息,第二個是標題
//第三個是按鈕種類,第四個是內容訊息前的按鈕種類

if ( myResult  == DialogResult.Yes)
{
   //按了是之後的事件
}
else if (myResult== DialogResult.No)
{
   //按了否之後的事件
}

2012年10月11日 星期四

RequiredFieldValidator 失效

參考網址
上次有寫過正則表達式,可是有時候他會秀逗,沒關係,我們從源頭斷絕數字跟小數點以外的輸入值...(斬草除根)


<asp:TextBox ID="TextBox" runat="server" OnKeyPress="if(((event.keyCode>=48)&&( event.keyCode <=57))||(event.keyCode==46)) {event.returnValue=true;} else{event.returnValue=false;}" MaxLength="15"> </asp:TextBox>

注意:如果不允許輸入小數點去掉“event.keyCode==46”這種情況

好用喔(笑

2012年9月26日 星期三

匯出Excel中文出現亂碼


省前略後~最主要就是~加上紅色部分~
 Response.AddHeader("content-disposition", "attachment;filename=" + DateTime.Now.Ticks + ".xls");
            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excel";
            Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>"); 
            StringWriter sw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(sw);

            for (int i = 0; i < gvExcel.Rows.Count; i++)
            {
                gvExcel.Rows[i].Attributes.Add("class", "textmode");
            }
      

看起來明明就是String的GUID

說到這個真的是把我搞死= =

//擷取網址中的String轉GUID
        string AA= QueryString("AA", String.Empty);
        Guid GUIDAA = new Guid(AA);

//將GUID型態的直放入Session
//跟平常用法一樣,Session的好處就是不看來源是啥哈哈哈
Session.Add("G_AA", GUIDAA);//分類序號

//取出Session型態是GUID的值(這個沒測過,應該是這樣)

        GUIDAA = new Guid(Session["GUIDAA"].ToString());

iTextSharp相關屬性記錄

本篇記錄輸出PDF元件會用到的一些屬性

引用的部分

using iTextSharp.text;
using iTextSharp.text.pdf;

以下紅色部分是製作完整PDF不可缺少的必須步驟~
黑色沒有也不會怎樣,只是你的PDF會沒有資料就是了哈哈哈

ValidationExpression 正規格式表


在.NET中進行客戶端驗證的時候可以預先給定一些規則(使用RequiredFieldValidator),讓程式先行驗證後再送到伺服器端
減少伺服器的壓力,但是這個規則的寫法不是很直覺

什麼時候他可以進步到我講「拜託幫我驗證一下手機號碼」然後他就懂了這樣就好了....
有這麼一天我看寫程式跟寫小說也差不多可以變成同個職業了啊!!!

設置GridView列的數據格式為百分比

在Gridview的BoundField屬性欄位中有個DataFormatString可設定
TemplateField可由後台指定toStrong的格式試試看~或是使用toString()+"%"