2012年11月7日 星期三

[C#]dr.delete


http://msdn.microsoft.com/zh-tw/library/ww3k31w0(v=VS.80).aspx



若RowState為added時
代表dt有加入值,但還沒接受變更

這個時候執行
foreach(DataRow dr in dt.Rows)
{
dr.delete();
}

會出現資料集已改變

這時,RowState的狀態是Detached
所以就會直接刪除

要在foreach之前就先執行dt.AcceptChange();

Rowstate的狀態才會是Delete

2012年9月21日 星期五

2012年8月27日 星期一

[C#] MessageBox.Show 應用

跳出錯誤Message視窗

public static void ShowError(string MessageText)
{
MessageBox.Show(MessageText, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}


跳出提示訊息方塊

public static void ShowHint(string MessageText)
{
MessageBox.Show(MessageText, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}


跳出警告訊息方塊

public static void ShowWarning(string MessageText)
{
MessageBox.Show(MessageText, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}


跳出疑問訊息方塊

public static bool ShowQuestion(string MessageText)
{
return MessageBox.Show(MessageText, "問題", MessageBoxButtons.YesNo, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button2).Equals(DialogResult.Yes);
}


跳出疑問訊息方塊(YesNoCancel)

public static DialogResult ShowConfirm(string MessageText)
{
return MessageBox.Show(MessageText, "問題", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button3);
}

2012年8月8日 星期三

[SQL]存取各種資料庫前十筆的語法

存取各種資料庫前十筆的語法
1. ORACLE
SELECT * FROM TABLE1 WHERE ROWNUM<=N

2. INFORMIX
SELECT FIRST N * FROM TABLE1 where 1=1

3. DB2
SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM WHERE ROWNUM<=N
或者
SELECT COLUMN FROM TABLE where 1=1 FETCH FIRST N ROWS ONLY

4. SQL SERVER
SELECT TOP N * FROM TABLE1 where 1=1
or
SET ROWCOUNT N SELECT * FROM TABLE1 where 1=1 SET ROWCOUNT N1

5. SYBASE
SET ROWCOUNT N SELECT * FROM TABLE1 where 1=1 SET ROWCOUNT N1

6. MYSQL
SELECT * FROM TABLE1 where 1=1 LIMIT N

7. FOXPRO
SELECT * TOP N FROM TABLE ORDER BY COLUMN

8. ACCESS
SELECT TOP N * FROM TABLE1

2012年8月7日 星期二

[C#]自動產生DataGridView

自動產生DataGridView


DataTable dt = GetScoreTypeTable();
//取得項目類別

DataTable dtItem = AssessScoreProxy.GetAssessItem(101, 8);
foreach (DataRow dr in dt.Rows)
{

    TabPage tbpage = new TabPage();
    tbpage.Location = new System.Drawing.Point(4, 24);
    tbpage.Padding = new System.Windows.Forms.Padding(3);
    tbpage.Size = new System.Drawing.Size(685, 539);
    tbpage.Name = "tp" + dr["No"];
    tbpage.Text = dr["Name"].ToString();
    tbpage.TabIndex = Convert.ToInt16(dr["No"]);
    tbpage.AutoScroll = true;
//是否自動顯示捲軸

    tbpage.UseVisualStyleBackColor = true;
    tabControl1.Controls.Add(tbpage);

    DataGridView dgv = new DataGridView();
    DataGridViewTextBoxColumn colItem = new DataGridViewTextBoxColumn();
    DataGridViewTextBoxColumn colScore = new DataGridViewTextBoxColumn();
    DataGridViewTextBoxColumn colTotScore = new DataGridViewTextBoxColumn();
    DataGridViewTextBoxColumn colScored = new DataGridViewTextBoxColumn();

    dgv.AllowUserToAddRows = false;
    dgv.AllowUserToDeleteRows = false;

    dgv.BackgroundColor = System.Drawing.SystemColors.Window;
    dgv.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
    dgv.Columns.Add(colItem);
    dgv.Columns.Add(colScore);
    dgv.Columns.Add(colTotScore);
    dgv.Columns.Add(colScored);
    dgv.Dock = System.Windows.Forms.DockStyle.Fill;
    dgv.Location = new System.Drawing.Point(0, 0);
    dgv.Name = "dgv";
    dgv.RowHeadersWidth = 10;
    dgv.RowTemplate.Height = 24;
    dgv.Size = new System.Drawing.Size(685, 539);
    dgv.TabIndex = 0;

    // colItem 
    colItem.HeaderText = "項目";
    colItem.Name = "colItem" + dr["No"];
    colItem.ReadOnly = true;
    colItem.Width = 150;
    colItem.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
    // colScore
    colScore.HeaderText = "分數";
    colScore.Name = "colScore" + dr["No"];

    // colTotScore
    colTotScore.HeaderText = "此項目所佔總分";
    colTotScore.Name = "colTotScore" + dr["No"];
    colTotScore.ReadOnly = true;
    colTotScore.Width = 150;

    // colScored
    colScored.HeaderText = "此項目已評分數加總";
    colScored.Name = "colScored" + dr["No"];
    colScored.ReadOnly = true;
    colScored.Width = 180;

    DataRow[] drItem = dtItem.Select("ScoreType='" + dr["No"] + "'");
    foreach (DataRow drI in drItem)
    {
        dgv.Rows.Add(drI["ScoreItemName"], "", drI["Percentage"], 0);
    }
    tbpage.Controls.Add(dgv);
}


2012年8月6日 星期一

[C#]自動產生物件


/// <summary>
/// 自動產生物件
/// </summary>
private void SetTabControlDefault()
{
    int pagecount =10;
    int count = 30;
    //TabPage(1~10)自動產生
    for (int J = 0; J < pagecount; J++)
    {
        TabPage tbpage = new TabPage();
        tbpage.Location = new System.Drawing.Point(4, 24);
        tbpage.Padding = new System.Windows.Forms.Padding(3);
        tbpage.Size = new System.Drawing.Size(685, 539);
        tbpage.Name = "tp" + J.ToString();
        tbpage.Text =  J.ToString();
        tbpage.TabIndex = J;
        tbpage.AutoScroll = true; //是否自動顯示捲軸
        tbpage.UseVisualStyleBackColor = true;

        tabControl1.Controls.Add(tbpage);
        //label.textbox 每個tabPage各產生30個
        for (int i = 0; i < count; i++)  
        {
            Label lb = new Label();  //label
            lb.Name = "lb" + tbpage.Name.ToString() + i.ToString();
            lb.Text = "lb" + tbpage.Name.ToString() + i.ToString();
            lb.AutoSize = true;
            lb.Location = new System.Drawing.Point(15, 10 + i * 30);
            lb.Size = new System.Drawing.Size(150, 25);
            lb.TabIndex = i;
            tbpage.Controls.Add(lb);

            TextBox txt = new TextBox(); //textbox
            txt.Name = "txt" + tbpage.Name.ToString() + i.ToString();
            txt.Location = new System.Drawing.Point(150, 10 + i * 30);
            txt.Size = new System.Drawing.Size(150, 25);
            txt.TabIndex = i;
            tbpage.Controls.Add(txt);
        }
    }          
}

2012年7月5日 星期四

[C#]當條件成立.變更背景顏色

當條件成立時,將該列的背景顏色變更

private void dgv_CellFormatting(object sender,DataGridViewCellFormattingEventArgs e)
{
try
{
DataGridView dgv = (sender as DataGridView);
if (dgv.Columns["dgvIsSelf"].Index == e.ColumnIndex)
{
if (Convert.ToBoolean(e.Value) == true) //是自費時,該列的顏色為黃色
{
dgv.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;
}
else
{
dgv.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
}
}
catch (Exception ex)
{
ex.ToString();
}


}

2012年7月4日 星期三

[LINQ]合併兩個DataTable

dt1:(id,name,add)
dt2:(id,tel)
要將dt1與dt2合併成
使用LINQ的LEFT JOIN
dt1有資料但dt2沒資料時,資料仍存在,沒有值的dt2就為預設值空白


var query =
 from a in dt1.AsEnumerable()
 join b in dt2.AsEnumerable()
   on a.Field("NAME") equals b.Field("NAME") into k
 from subpet in k.DefaultIfEmpty()
select new
{ ID = a.Field("ID"),
 NAME= a.Field("NAME"),
 ADD = a.Field("ADDRESS"),
 TEL = (subpet == null ? String.Empty: subpet.Field("TEL "))
)};

2012年6月25日 星期一

getdate()日期變化 on sqlserver

getdate()日期變化 on sqlserver

Using SQL Server 2008

-- remove the time
SELECT CAST(GETDATE() AS date) -- 2009-07-12
-- remove the date
SELECT CAST(GETDATE() AS time) -- 08:46:25.8130000


Cast Date with No Time Using Convert

-- Month first
SELECT CONVERT(varchar(12),GETDATE(), 101) -- 06/29/2009
SELECT CONVERT(varchar(12),GETDATE(), 110) -- 06-29-2009
SELECT CONVERT(varchar(12),GETDATE(), 100) -- Jun 29 2009
SELECT CONVERT(varchar(12),GETDATE(), 107) -- Jun 29, 2009

-- Year first
SELECT CONVERT(varchar(12),GETDATE(), 102) -- 2009.06.29
SELECT CONVERT(varchar(12),GETDATE(), 111) -- 2009/06/29
SELECT CONVERT(varchar(12),GETDATE(), 112) -- 20090629

-- Day first
SELECT CONVERT(varchar(12),GETDATE(), 103) -- 29/06/2009
SELECT CONVERT(varchar(12),GETDATE(), 105) -- 29-06-2009
SELECT CONVERT(varchar(12),GETDATE(), 104) -- 29.06.2009
SELECT CONVERT(varchar(12),GETDATE(), 106) -- 29 Jun 2009

-- Time only
SELECT CONVERT(varchar(12),GETDATE(), 108) -- 07:26:16
SELECT CONVERT(varchar(12),GETDATE(), 114) -- 07:27:11:203


Roll Your Own Date

SELECT DATENAME(MONTH, GETDATE()) -- June
SELECT DATENAME(DAY,GETDATE()) -- 29
SELECT DATENAME(YEAR, GETDATE()) -- 2009

-- Concatente values
-- June.29.2009
SELECT DATENAME(MONTH, GETDATE()) + '.' + DATENAME(DAY,GETDATE()) + '.' + DATENAME(YEAR, GETDATE())



Cast Date With No Time Using Floor

-- Get the current day with no time
-- 2009-06-29 00:00:00.000
SELECT CAST(FLOOR(CAST(GETDATE() AS float)) AS datetime)

-- Get the next day
-- 2009-06-30 00:00:00.000
SELECT CAST(CEILING (CAST(GETDATE() AS float)) AS datetime)



2012年5月9日 星期三

[EXCEL]VLOOKUP


[C#] DataRow的刪除


private void SetTestDataTable()
{
DataTable dtTest = new DataTable();
dtTest.Columns.Add("Id",typeof(int));
dtTest.Columns.Add("Name",typeof(string));
dtTest.Rows.Add(1, "aaa");
dtTest.Rows.Add(2, "bbb");
dtTest.Rows.Add(3, "ccc");
dtTest.Rows.Add(4, "ddd");
dtTest.Rows.Add(5, "eee");

foreach (DataRow dr in dtTest.Rows)
{
  if (Convert.ToInt16(dr["id"].ToString()) % 2 == 0)
  {
     dr.Delete(); //標記要刪資的資料列
  }
}

dtTest.AcceptChanges(); //真正移除作業
}

2012年5月8日 星期二

[C#]鍵盤事件-按Enter執行動作及Ctrl+A全選


Button按下ENTER時做的動作

private void Button1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (Char)Keys.Enter)
{
TextBox.Text = "";
}
}


TextBox內設定全選功能
private void TextBox_SelectAll(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A)
{
(sender as TextBox).SelectAll();
}
}

2012年5月4日 星期五

[C#]使用xmlWriter建立xml文件

使用xmlWriter建立xml文件


XmlWriter writer = null;

Encoding enc = Encoding.GetEncoding("big5");

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = false;
settings.NewLineOnAttributes = true;
settings.Encoding = enc;

settings.Indent = true;
settings.IndentChars = ("\t");

spath = @"c:\" + sNow + ".xml";
writer = XmlWriter.Create(spath, settings);
writer.WriteStartElement("body");
writer.WriteElementString("d1", "001");
writer.WriteElementString("d2", "002");
writer.WriteEndElement();
writer.Flush();

[SQL]將日期轉成yyymmdd 的格式

將日期轉成yyymmdd 的格式

SELECT
RIGHT(CAST(1000+ DATEPART(yy, GetDate())-1911 AS CHAR(4)),3) +
RIGHT(CAST(100 + DATEPART(MM, GetDate()) AS CHAR(3)),2) +
RIGHT(CAST(100 + DATEPART(DD, GetDate()) AS CHAR(3)),2) AS ToDay

[C#]常用逸出字元


C#常用逸出字元
跳脫字元功能說明
\'單引號
\"雙引號
\\反斜線
\a發出一聲警告
\b倒退一個字元 
\fForm Feed 
\n換新行 
\r換行並移到最前方
\t水平方向的Tab
\v垂直方向的Tab

2012年3月20日 星期二

[INFORMIX] 日期轉民國年


SELECT substr(CAST(1000+YEAR(reportdate)-1911 AS CHAR(4)),-3),
substr(CAST(100+MONTH(reportdate) AS CHAR(3)),-2) ,
substr(CAST(100+DAY(reportdate) AS CHAR(3)),-2),

substr(CAST(1000+YEAR(reportdate)-1911 AS CHAR(4)),-3) ||
substr(CAST(100+MONTH(reportdate) AS CHAR(3)),-2) ||
substr(CAST(100+DAY(reportdate) AS CHAR(3)),-2)
FROM Totfa
WHERE ReportMonth = 10102

結果:
(expression) (expression)_1 (expression)_2 (expression)_3
101 03 05 1010305


2012年2月27日 星期一

[LINQ]使用LINQ將Datatable轉成xml

使用LINQ將Datatable轉成xml

using System.Xml.Linq;


private string GetXmlByDt(DataTable dt)
{
XDocument Employee = new XDocument(new XDeclaration("1.0", "utf-8", "true"),
new XElement("MB1", from cust in dt.AsEnumerable()
select new XElement("A11", cust["No"]
)));

return Employee.ToString();
}


執行後結果如下

2012年2月17日 星期五

[SQL]在SQL裡下迴圈

想把另一個table的資料更新至此table裡,
用下迴圈的方式...目前想到比較好的解答就這樣了


declare @Start int
declare @End int
set @Start =1
set @End=3480
while (@Start < @End)
begin
update TABLE_A
set BirthDay =
(select BirthDay from TABLE_B where PtNo = @Start)
WHERE PtNo = @Start
set @Start=@Start +1
end

2012年2月7日 星期二

[C#]記錄程式執行時間

記錄程式執行時間
要先using System.Diagnostics;

using System.Diagnostics;
Stopwatch sw = new Stopwatch();
sw.Reset();
sw = Stopwatch.StartNew();
//要測時間的程式碼放這裡
sw.Stop();
TimeSpan e1 = sw.Elapsed;
long ms = sw.ElapsedMilliseconds;
MessageBox.Show(e1 + "秒 " + ms + "毫秒");

2012年1月19日 星期四

[C#]將文件寫入檔案裡

將文件寫入檔案裡,會自動產生一個檔案,把文字寫入此檔案裡


private bool CreateXml(string xml)
{
try
{
string sNow = DateTime.Today.Year.ToString()
+ DateTime.Now.ToString("MMddHHmmss");
string spath = @"c:\RecXml\RecsXml" + sNow + ".xml";
StreamWriter sw = File.AppendText(spath);
sw.WriteLine(xml);
sw.Flush();
sw.Close();

HisMessage.ShowHint("檔案寫入成功,路徑:" + spath);
return true;
}
catch
{
HisMessage.ShowHint("寫入xml檔時發生錯誤");
return false;
}
}

[SQL]將查詢出來的表格轉成XML-FOR XML

將查詢出來的表格轉成XML-FOR XML

SELECT 1 AS A00,
NhiType AS A01,
1.0 AS A02
FROM NhiICCardRecord
WHERE NhiNo = 1
FOR XML PATH ('REC')

SELECT執行後,就會直接產生可點開的XML



產生的XML內文就是以REC為根目錄,每個欄位就各為TAG

[C#]顯示處理進度狀態-ProgressBar

想要在畫面上顯示處理進度狀態.從工具箱抓出來再加幾小段程式即可

progressBar1.Maximum = 600;
for (int i = 1; i <= 600; i++)
{
sxml = sxml + GetREC(i);
progressBar1.Value = i;
}







2012年1月18日 星期三

[C#]Switch-case用法

Switch-case用法...
因為太常忘記.就放著讓我隨時可以copy


private void Switch_Test(Int16 INo)
{
switch (INo)
{
case 0:
MessageBox.Show("0");
break;
case 1:
MessageBox.Show("1");
break;
case 2:
MessageBox.Show("2");
break;
default :
MessageBox.Show("default");
break;
}
}

[SQL]查詢日期轉為民國年


查詢日期轉為民國年,有時候資料需要前面加0,利用RIGHT與CAST配合



PRINT 'CAST : '
+ RIGHT(CAST(1000+ DATEPART(yy, getdate())-1911 AS CHAR(4)),3)+'-'
+ RIGHT(CAST(100 + DATEPART(MM, getdate()) AS CHAR(3)), 2) +'-'
+ RIGHT(CAST(100 + DATEPART(DD, getdate()) AS CHAR(3)), 2) +' '
+ RIGHT(CAST(100 + DATEPART(HH, getdate()) AS CHAR(3)), 2) +':'
+ RIGHT(CAST(100 + DATEPART(MI, getdate()) AS CHAR(3)), 2) +':'
+ RIGHT(CAST(100 + DATEPART(SS, getdate()) AS CHAR(3)), 2)

--------print--------------
/**
CAST : 101-01-18 11:28:38
**/

2012年1月17日 星期二

[C#]TextBox全選-Ctrl+A

TextBox全選按Ctrl+A都沒反應....

把下面這串Function套到textbox事件的keydown即可!!



private void TextBox_SelectAll(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A)
{
(sender as TextBox).SelectAll();
}
}

2012年1月13日 星期五

[XML]特殊字元

< 小於 &lt;
> 大於 &gt;
& 和 &amp;
' 單引號 &apos;
" 雙引號 &quot;
斷行符號 &#13

2012年1月10日 星期二

codetest

string Dir = page.Server.MapPath("~/");
StreamWriter sw = File.AppendText(Dir + "input.txt");
sw.WriteLine("第一行");
sw.WriteLine("第二行");
sw.Flush();
sw.Close();