顯示具有 C# 標籤的文章。 顯示所有文章
顯示具有 C# 標籤的文章。 顯示所有文章

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

2014年8月28日 星期四

string.CompareTo之講人話好不

因為我腦袋比較差一點,一直看不懂MSDN上面的解釋

假設AllData數列內容為{甲,乙,丙,丁,戊},StartValue =乙

var a = AllData.Where(s => s.CofValue.CompareTo(StartValue) <= 0).Count();//2
var b = AllData.Where(s =>s.CofValue.CompareTo(StartValue) < 0).Count();//1
var c = AllData.Where(s => s.CofValue.CompareTo(StartValue) >= 0).Count();//4
var d = AllData.Where(s => s.CofValue.CompareTo(StartValue) > 0).Count();//3

記一下不然每次用每次忘

2014年4月16日 星期三

這個物件沒有定義無參數的建構函式。

這是發生在MVC架構的事件
起因是第一次載入Index頁面時OK,但查詢submit後會出現標題的錯誤訊息
下中斷點沒反應

Index

QueryModel

Controller

DataModel

出現錯誤原因
QueryModel沒有實作空的建構子
實作後即可解決此問題

QueryModel(){}
QueryModel(String A){}

2013年11月11日 星期一

Crystal Report 排序問題

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

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

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

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

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


2013年8月16日 星期五

日期格式,完整月日年/日月年

輸出格式為日期
DateTime.Now.ToString("MM/dd/yyyy").ToString(CultureInfo.GetCultureInfo("en-GB"))
"08/16/2013"
 DateTime.Now.ToString("MMMM/dd/yyyy", CultureInfo.GetCultureInfo("en-GB"))
"August/16/2013"
 DateTime.Now.ToString("MMMM-dd-yyyy", CultureInfo.GetCultureInfo("en-GB"))
"August-16-2013"
 DateTime.Now.ToString("MMMM dd yyyy", CultureInfo.GetCultureInfo("en-GB"))
"August 16 2013"...


輸出格式為字串
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo("en-GB"))
"16 August 2013"

不難,但要用的時候很容易臨時想不起來XD

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年7月4日 星期四

MVC + Razor 在內部傳遞數據

參考資料參考資料

最近在學Razor語法,據說是長得很像C#但我完全沒感覺的Razor...
這是為了配合MVC架構

所謂MVC架構就是...

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年2月20日 星期三

在GridView中調用UserControl物件

參考網址
是說UserControl參數的調用方法不是本篇的重點 
本篇重點在....當UserControl放在GridView裡面的時候,如何呼叫到每一列的UserControl的參數
大致上如下

現在有兩個頁面A.aspx和B.ascx
A.aspx

 <asp:GridView ID="gvData" runat="server" >
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate >
                         <ucl:UserControlB ID="bb"  runat="server" />
                   </ItemTemplate>
                    <ItemStyle Width="25%" HorizontalAlign="Center" />
                </asp:TemplateField>
            </Columns>
        </asp:GridView>


A.aspx.cs

for (int i = 0; i < gvData.Rows.Count; i++)
            {
                UserControl_B b1 = (UserControl_B)gvData.Rows[i].FindControl("bb");//取得UserControl
            }


B.ascx.cs

public partial class UserControl_B : System.Web.UI.UserControl
{}...

紅字部分就可以用ID取到GridView的UserControl物件了

寄發Mail功能(使用Gmail測試)

參考網址
首先引用這個
using System.Net.Mail;
//內容,標題,收信人

 public void send_email(string msg, string mysubject, string address)
        {
            MailMessage message = new MailMessage("Gill@gmail.com", address);//MailMessage(寄信者, 收信者)
            message.IsBodyHtml = true;
            message.BodyEncoding = System.Text.Encoding.UTF8;//E-mail編碼
            message.SubjectEncoding = System.Text.Encoding.UTF8;//E-mail編碼
            message.Priority = MailPriority.Normal;//設定優先權
            message.Subject = mysubject;//E-mail主旨
            message.Body = msg;//E-mail內容

            SmtpClient MySmtp = new SmtpClient("smtp.gmail.com", 587);//設定gmail的smtp
            MySmtp.Credentials = new System.Net.NetworkCredential("giXXX@gmail.com", "XXXXX");//gmail的帳號密碼System.Net.NetworkCredential(帳號,密碼)
            MySmtp.EnableSsl = true;//開啟ssl
            MySmtp.Send(message);

            MySmtp = null;
            message.Dispose();
        }

然後使用這個方法
  send_email(
     tbxContent.Text.Replace("\r\n", "<br />"), //使用\r\n才有換行功能
     tbxTitle.Text,
     "Gii@gmail.com");

然後用來登入的帳戶會收到一個類似LOG的記錄信函
大概是說有人在這個IP用你的帳號登入~不要太在意Gmail人很好的繼續測吧測吧~

DataTable的Distinct以及插資料

參考網址參考網址
是說DataTable要以某一欄(Column)為主,取不重複值,這個其實不難做
以前以為要用LinQ啥的一直很排斥去學,總想著能用SQL就不要用另一套

最近大概腦袋被門夾到開竅了想說多多嘗試
程式碼就一行不囉嗦!
DataTable NewDT = OldDT.DefaultView.ToTable(true, new string[] { "要取專一值的Column名稱" });


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");
            }