2014年9月10日 星期三

C# 控件:Login的使用

Login控件的使用,可參考下列網站:

http://www.dotblogs.com.tw/kevin8977/archive/2009/08/21/10166.aspx

錯誤訊息:名稱 'FormsAuthentication' 不存在於目前內容中

在製作登入機制時,加入↓↓↓↓↓↓

FormsAuthentication.RedirectFromLoginPage(Login1.UserName, true);

發生了錯誤訊息:【名稱 'FormsAuthentication' 不存在於目前內容中】

解決方法是加入use即可,


using System.Web.Security;
using System.Security.Cryptography;


ASP.NET 4.5 加入 Login 控制項產生錯誤訊息

ASP.NET 4.5 加入 Login 控制項產生錯誤訊息,訊息如下:

WebForms UnobtrusiveValidationMode 需要 'jquery' 的 ScriptResourceMapping。請加入 ScriptResourceMapping 命名的 jquery (區分大小寫)。

因為 ASP.NET 4.5 採用了不同的 Client Side 驗證方式。

解決方式只要在Web.config檔案中加入

<configuration>
  <appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
  </appSettings>
</configuration>


即可以解決此問題。

參考來源:

http://www.allenkuo.com/GenericArticle/view1441.aspx
http://www.webcodeexpert.com/2013/06/how-to-solve-webforms.html

2014年8月23日 星期六

GridView 中的CheckBox全選

        $(document).ready(function () {
            $('input[id="btn_SelectAll"]').click(function () {
                var tbl = $('table[id ="myTable"]');
                tbl.each(function () {
                    $(this).find('tr').each(function () {
                        $(this).find('td').each(function () {
                            $(this).find('input[type="checkbox"]').attr('checked', false);
                        })
                    })
                })
            })
      })

參考:http://bigone2000.pixnet.net/blog/post/56715490-%E4%BB%A5jquery%E5%AF%A6%E4%BD%9Ccheckbox%E5%85%A8%E9%81%B8%E5%8A%9F%E8%83%BD

2014年5月17日 星期六

mysql workbench 無法開啟

mysql workbench 無法開啟,原因是必須得安裝下列兩個軟體才可以運行。


1. .netFramework 4.0
2. Microsoft Visual C++ 2010 Redistributable Package (x86)

2014年4月17日 星期四

GridView - DataSource = DataTable 時自動分頁(C#)

參考來源:

修改TextBox的數值,值不變...

在前端修改TextBox的數值,到後端後,發現數值沒有改變,經查證後,發現每次到後端時,會先跑到Page_Load執行,所以每一次都會複寫,導致感覺值都沒變,但其實是被恢復成一開始的數值。

解決方法:

在Page_Load裡加上

if (!(Page.IsPostBack)){

      ..............

}

IsPostBack為是代表前端觸發某些事件,回到後端。

第一次初始載值的時候IsPostBack就會為否。

2014年4月6日 星期日

錯誤【PageHandlerFactory-Integrated】

執行ASP.NET網站,發生執行錯誤【PageHandlerFactory-Integrated】,代表在當初建立環境時,先裝了.NetFramework 4.0之後才去安裝IIS。

解決辦法:

以系統管理員身份執行命令提示字元,輸入【%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i】重新註冊FrameWork 4,安裝完成後即可正常使用。

如果為64位元,請輸入【%systemroot%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i】

錯誤【要求的內容似乎是指令碼,因此靜態檔案處理常式便不會對它進行處理。】

在IIS佈署網站時,執行後出現【要求的內容似乎是指令碼,因此靜態檔案處理常式便不會對它進行處理。】的錯誤,經過Google大神的幫忙,發現是要先安裝【ASP.NET MVC 3.0】方可順利的執行。

2014年4月4日 星期五

MYSQL 取得上一次自動編號的值

如果表格主鍵為自動編號,新增完後要如何取得剛剛新增後所產生的數字呢?

只要加上【SELECT LAST_INSERT_ID();】在INSERT語句後即可。

EX:

INSERT INTO "TABLENAME" (FIELD NAME) VALUES ("VALUE");
SELECT LAST_INSERT_ID();

2014年3月29日 星期六

AJAX 強制更新

在Web的應用中,很多人都會使用AJAX來做非同步的資料傳輸,但常常會遇到一個問題,就是我一開始抓取的值,在對資料做變更後,再回到同一頁,資料是沒有變動的,如果關閉瀏覽器,在開啟一次同一頁面,顯示的值就會是最新的值。

原來AJAX會將讀取過的資料CACHE起來,如果每次都要更新的話,請加上下面這一行程式碼。

Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

2014年1月27日 星期一

【指令】讓代理程式在Server上跑

tell amgr run "資料庫路徑" '代理程式名稱'

資料庫路徑:用雙引號包起來。

代理程式名稱:不能用雙引號,如果有(),也不能加上去。

2014年1月26日 星期日

MySql的Foreign Key

當關聯父資料表的主鍵紀錄行被刪除或修改時,子資料表中紀錄行的處理方式:
CASCADE - 會將有所關聯的紀錄行也會進行刪除或修改。
SET NULL - 會將有所關聯的紀錄行設定成 NULL。
NO ACTION - 有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
RESTRICT - 與 NO ACTION 相同。


參考網站:http://jax-work-archive.blogspot.tw/2007/10/innodb-mysql-foreign-key.html

2014年1月17日 星期五

使用Font類繪製文本(DrawString())

參考連結至:

http://blog.csdn.net/wwwiii520/article/details/2072010

利用Font的類別來定義文的的大小、樣式。

代碼如下:

public partial class Stringformat : Form
    {
        public Stringformat()
        {
            InitializeComponent();

            SetStyle(ControlStyles.Opaque, true);
            Point p = new Point(0, 0);
            Size s = new Size(500, 300);
            //Bounds = new Rectangle(0, 0, 500, 300);
            Bounds = new Rectangle(p, s);//窗體大小及相對於父客體的位置(0,0)
        }
        protected override void OnPaint(PaintEventArgs e)//重定義基類OnPaint()方法
        {
            Graphics g = e.Graphics;
            int y = 0;
            g.FillRectangle(Brushes.White, ClientRectangle);//繪制窗體背景色
            Rectangle rect = new Rectangle(0, y, 400, Font.Height);
            //g.FillRectangle(Brushes.Blue, rect);//墳兗一個矩形
            g.DrawRectangle(Pens.Blue, rect);//繪製一個矩形
            g.DrawString("This text is left justified.", Font, Brushes.Black, rect);
            y += Font.Height + 20;
            //Font.Dispose();//沒有創建對象,無須釋放資源

            Font afont = new Font("Arial", 16, FontStyle.Bold | FontStyle.Italic);
            rect = new Rectangle(0, y, 400, afont.Height);
            g.DrawRectangle(Pens.Blue, rect);
            StringFormat sf = new StringFormat();
            sf.Alignment = StringAlignment.Far;
            g.DrawString("This text is right justified.", afont, Brushes.Blue, rect,sf);
            y += afont.Height + 20;
            afont.Dispose();//創建了對象,須釋放資源

            afont = new Font("Courier Ncw", 12, FontStyle.Underline|FontStyle.Bold);
            rect = new Rectangle(0, y, 400, afont.Height);
            g.DrawRectangle(Pens.Blue, rect);
            sf = new StringFormat();
            sf.Alignment = StringAlignment.Center;
            g.DrawString("This text is centered, and unederlined.", afont, Brushes.Blue, rect, sf);
            y += afont.Height + 20;
            afont.Dispose();

            afont = new Font("Times New Roman", 12);
            rect = new Rectangle(0, y, 400, afont.Height * 3);
            g.DrawRectangle(Pens.Blue, rect);
            string longString = "This text is much longer, and drawn ";
            longString += "into a rectangle that is higher than ";
            longString += "one line,so that it will wrap. It is ";
            longString += "very easy to wrap text using GDI+.";
            g.DrawString(longString, afont, Brushes.Black, rect);
            afont.Dispose();
        }
    }

C# : 使用 DataSet 管理從 MySQL 查詢出來的資料

此文引用自:http://godstamps.blogspot.tw/2012/02/c-dataset-mysql.html

在【C# : 對 MySQL 查詢資料】一文中查詢多筆資料所使用到的 MySqlDataReader 會與資料庫建立持續性的連線,所以在查詢完資料後必須明確的 Close();有時候我們會使用多句不同的查詢語句查詢出資料並長時間交互使用資料內容,而且這些資料並不會馬上被更新或是不需要更新,那麼每次都重新查詢或是使這些 MySqlDataReader 都一直維持連線,好像怎麼樣都不是很理想,這時候我們就可以考慮使用 DataSet 建立資料塊。
首先,利用 MySqlDataAdapter 來查詢資料並為查出的資料定義一個名稱整塊填入 DataSet 中做為 DataTable,之後可以利用所定義的名稱從 DataSet 取出 DataTable 並在 DataTable 指定列及欄位取得所需要的資料;而且也可為 DataTable 新增、修改、刪除資料,最終再整理 MySQL 語句將結果更新回資料庫中,如此將可對資料庫避免一些不必要讀寫的次數。大致的用法如下...

//開啟連線
MySqlConnection conn = new MySqlConnection("server=127.0.0.1;user=root;database=test;port=3306;password=1111;");
conn.Open();

//建立 DataSet
DataSet dataSet = new DataSet();

//使用 MySqlDataAdapter 查詢資料,並將結果存回 DataSet 當做名為 test1 的 DataTable
string sql = "SELECT * FROM test_table1 WHERE 1";
MySqlDataAdapter dataAdapter1 = new MySqlDataAdapter(sql, conn);
dataAdapter1.Fill(dataSet, "test1");

//使用 MySqlDataAdapter 查詢資料,並將結果存回 DataSet 當做名為 test2 的 DataTable
dataAdapter2 = new MySqlDataAdapter("SELECT * FROM test_table2 WHERE 1", conn);
dataAdapter2.Fill(dataSet, "test2");

// test1 的 DataTable
DataTable dataTable = dataSet.Tables["test1"];

//列出 test1 的第 4 筆資料
Console.WriteLine("id={0} , name={1}", dataTable.Rows[3]["id"], DataTable.Rows[3]["name"]);

//列出 test1 的總筆數
Console.WriteLine("總筆數:{0}", dataTable.Rows.Count);

//逐筆列出 test1 的資料
foreach(DataRow row in dataTable.Rows){
    Console.WriteLine("id={0},name={1}", row["id"], row["name"]);
}

//建立新一列的資料
DataRow newRow = dataTable.NewRow();
newRow["id"] = 999;
newRow["name"] = "testName999";

//在 test1 中新增一筆資料
dataTable.Rows.Add(newRow);

//刪除 test1 中的 第 4 筆資料
dataTable.Rows[3].Delete();

//修改 test1 中第 1 筆資料的 name 欄位內容
dataTable.Rows[0]["name"] = "newName";

//利用 MySqlCommandBuilder 使 dataAdapter1 能夠實行新增、修改、刪除
new MySqlCommandBuilder(dataAdapter1);

//將 test1 內容的變動更新回資料庫
dataAdapter1.Update(dataSet, "test1");

一個 DataSet 可以存放多個 DataTable,而每個 DataTable 資料的變更可以透過 MySqlDataAdapter 連接更新回資料庫,這樣可以很方便的管理多批資料,不過要特別注意的是複雜語句查出的資料可能會無法正確處理,如 JOIN、GROUP BY ... 等。

以上範例可以簡單的應用在 Windows Form 應用程式的 DataGridView ...

假設有的 DataGridView 實作為 dataGridView1,延續上面範例的 DataSet ...

//指定資料來源
dataGridView1.DataSource = dataSet;

//指定列出 test1 DataTable 內容
dataGridView1.DataMember = "test1";

這樣在顯示視窗的 DataGridView 內容就會依照 test1 DataTable 資料欄位將內容資料以列表的方式顯示出來,可以直接在列表中新增、修改、刪除資料,不過如果想將變更的內容更新回資料庫,可能就要再加一個按鈕,使它在點擊之後執行以下這兩句,才會更新,否則只是表單上表面看到的變動而已,資料庫並不會有任何更改。

new MySqlCommandBuilder(dataAdapter1);
dataAdapter1.Update(dataSet, "test1");