0001.png
有時候在資料設計上會有 主檔 與 紀錄檔,來進行關聯與紀錄
但取得資料時,只想要取得最新一筆,( 或依照我們所要的排序條件取得最新或最舊 )
但又不想在程式上處理,希望直接用SQL取得 就可以運用 ROW_NUMBER() 與PARTITION BY
標準的紀錄Table會如下
這時候可以使用 ROW_NUMBER()  並且 以"時間"欄位排序,替資料編號
但這樣只會把所有資料都加上編號 並命名為sn 欄位,且全部依照時間從最新排序到最舊
如果不想要使用GROUP BY 跟MAX,那可以嘗試使用 PARTITION BY配合ROW_NUMBER()  來為資料做群組與編號
PARTITION BY '要群組的欄位名稱' 
這時候就會依照我們要群組的欄位"訂單",針對同一群組進行編號
這樣就會依照不同訂單,進行重新編號

ADOLPH 發表在 痞客邦 留言(0) 人氣()

SQL01.png
在設計資料表時,通常都會為欄位加上描述說明
但是預設的SQL Server Management Studio 設計模式,卻只有
資料行名稱,資料類型,允許NULL 3個欄位
要加上說明必須點選該資料行後到下方的資料行屬性表,找到描述這個屬性來進行設定
還頗為麻煩

ADOLPH 發表在 痞客邦 留言(0) 人氣()

01
在資料庫中用了比較簡單的方法來記錄所有單位
結構大致上如下,此為精簡後的表示,沒用的欄位就沒列出來
 
大約有200多的單位,也就不一一列出了,意思意思表示一下

ADOLPH 發表在 痞客邦 留言(0) 人氣()

decimal i_1 =Convert.ToDecimal(txt1.Text.Trim());
decimal i_2 = Convert .ToDecimal(txt2.Text.Trim());
//真正結果
lab_1.Text = (i_1 / i_2).ToString();

ADOLPH 發表在 痞客邦 留言(0) 人氣()

文章與新範例已經搬遷至 新的blog Adolph開瓶程式碼
 

ADOLPH 發表在 痞客邦 留言(0) 人氣()

因為某些需求 有可能只想讓開發的win form 應用程式只執行一次
因此必須在程式進入時 去取得系統的執行駐列中 是否已經有相同的應用程式在執行
如果有 就必須結束
 

ADOLPH 發表在 痞客邦 留言(3) 人氣()

阿~終於完成這個功能了
其實也不過是個小功能
只是一直沒有時間弄@@
趁最近有專案要用Windows Form開發
也要搭配資料庫
就順便弄起來

ADOLPH 發表在 痞客邦 留言(0) 人氣()

dfaf.gif
 
 
程式設計上的時間計算 還真的是門學問
可能是因為用到的時機少
所以平常不熟悉

ADOLPH 發表在 痞客邦 留言(1) 人氣()

這個小問題著實也費了番功夫
一開始很天真的以為只要是繫結欄位都只要用
GridView.Rows(Index).Cell(Index).Text 就可以取得
無奈如果你的欄位是一個ButtonField或是HyperLinkField他只會回傳給你一個空字串

ADOLPH 發表在 痞客邦 留言(1) 人氣()

這個小問題著實也費了番功夫

一開始很天真的以為只要是繫結欄位都只要用
GridView.Rows(Index).Cell(Index).Text 就可以取得
無奈如果你的欄位是一個ButtonField或是HyperLinkField他只會回傳給你一個空字串
 
原是啥呢...因為這兩種欄位他還是有自己的Text屬性
但是如我們要依照資料庫篩選的資料來顯示 就會去設定 DataTextField 屬性為對應的欄位名稱

 
如果同時設定Text跟DataTextField那Text屬性會無效
但是我沒有去測試這樣是否就會取到Text的值 ~ 反正我們要的是變動的值 ~
 
那要怎麼取得DataTextField上的文字呢
這個問題的資料查起來還真的不多
有一部分的解答是錯誤的 後來找的一份正確的
 
錯誤的資料如下:
C# 語法 

string Mystr1 = ((HyperLink)row.Cells[1].Controls[0]).Text;

string Mystr2 = ((Button)row.Cells[2].Controls[0]).Text


VB 語法


string Mystr1 = CType(GridView1.Rows(Index).Cells(Index).Controls(0), HyperLink).Text

string Mystr2 = CType(GridView1.Rows(Index).Cells(Index).Controls(0), Button).Text



 
正確語法如下
C#語法

string Mystr1 = ((HyperLink)row.Cells[1].Controls[0]).Text;
string Mystr2 = ((LinkButton)row.Cells[2].Controls[0]).Text


VB 語法


string Mystr1 = CType(GridView1.Rows(Index).Cells(Index).Controls(0), HyperLink).Text

string Mystr2 = CType(GridView1.Rows(Index).Cells(Index).Controls(0), LinkButton).Text



 
HyperLinkField轉換型別為HyperLink沒有問題
但是ButtonField的部分 則是轉換成LinkButton而不是Button

ADOLPH 發表在 痞客邦 留言(0) 人氣()


在Web開發的過程中難免會動態去產生一些控制項
如果這些控制項只是顯示用的到沒啥問題
不過如果是要動態生一些具有事件的控制項 要怎麼 一起產生對應的事件呢?

其實這個問題來自於我想偷懶的做法
因為其實大部分的控制項都可以在設計時期就配置好
不管是用很複雜的程式也好 用很多的判斷去控制險式或不顯示也好
但是這樣就難免造成有一堆控制物件顯示或不顯示的程式碼
(也就是沒啥功能.卻有一長串.但不好識別)
另外對效能也是個影響 畢竟Web程式是透過網路的
因此為了精簡程式 也為了方便管理 還有一點點為了效能 就去找了相關資料


C# 的動態事件指定與VB.net 不太相同
雖然都叫委派 不過 在MSDN裡面委派可是有一大篇章節 更有一堆範例 實做
不同時機使用不同類型,方法.....等
但我的目的只是解決我的問題....…因此 理論的東西就先擱著吧~~
先說再VB.net中 如果動態產生了一些控制項 如 LinkButton 同時要賦予他事件其做法如下












'動態產生10個LinkButton

For i As Integer = 1 To 10


    '動態產生LinkButton
    Dim lbtn As New LinkButton()


    '指定顯示的文字
    lbtn.ID=
"lbtn" & i
    lbtn.Text = "按鈕" & i


    '指定命令名稱引述 當作參數 在對應事件時可用來判斷
    lbtn.CommandArgument = i


    '建立事件關聯
    AddHandler lbtn.Click, AddressOf testEven  ‘
testEven 是我們要指定的事件

    '加到容器中 例如 Panel
    Panel1.Controls.Add(lbtn)


Next


'下來 處理該事件
Private Sub testEven(ByVal sender As Object, ByVal e As System.EventArgs)


        '轉換事件來源的物件 為LinkButton
        Dim newlbtn As LinkButton = CType(sender, LinkButton)


        '輸出呼叫此事件按鈕的命令引數 當然可以以此做其他處理
        Response.Write(newlbtn.CommandArgument)
       
End Sub









//接下來是C#的做法
//相同過程就不在述 例如產生控制項  指定文字 或ID 加入容器..等
//僅說明 產生對應事件的語法
lBtn.Command += new CommandEventHandler(testCommand);

//testCommand是我們要處理的事件
//事件處理函式
void pageBtn_Command(object sender, CommandEventArgs e)
{
    //取得呼叫此事件的物件參數 然後就可以做其他處理
    string strtest1 = e.CommandArgument;
   
    //或者取得物件本身
    LinkButton Lbtn = (LinkButton)sender;
   //取得參數 或命令名稱
   string strtest2 = Lbtn.CommandEventArgs ;
   string strtest3 = Lbtn.CommandName;
   //然後就可以做其他處理
}



ADOLPH 發表在 痞客邦 留言(0) 人氣()


之前因為工作上有需求
必須將一長串的字串進行反轉.然後對照另一個字串
由於工作上都是紙本作業.所以再把"字串反轉"這件事情上來講
就顯得很耗時間 因為那串字串並不是十幾二十個字而已
所以~就有了如何把字串進行處理 讓他前後顛倒的小程式測試
首先呢 反正佈局大概就是兩個文字 一個負責輸入要反轉的字串
一個就是把結果輸出
畫面大略如下
image
反轉的處理如下




    //取得來源字串
    string SRC = textBox1.Text;
    //將取得的字串 轉換成陣列
    char[] ArraySRC = SRC.ToCharArray();
    //反正整個字串陣列的順序
 
   Array.Reverse(ArraySRC);
    //使用迴圈取出該陣列的元素 逐一加到結果輸出
   for (int k = 0; k < ArraySRC.Length; k++)
    {
        textBox2.Text = textBox2.Text + ArraySRC[k].ToString();
    }


 







在這裡要說明的是
字串物件必須透過迴圈的方式將元素逐一取出
因此如果字串的長度較大 就會形成轉換成陣列時 必須以較大的陣列容納 在逐一取出
而對效能的影響就不可說不大
因此~改良版出現了....



    //取得來源字串
    string SRC = textBox1.Text;
    //將取得的字串 轉換成陣列
    char[] ArraySRC = SRC.ToCharArray();
    //反轉整個字串陣列的順序
    Array.Reverse(ArraySRC);
    //透過初始化將已經反轉的陣列值 再轉換為 字串
    SRC = new string(ArraySRC);

    //輸出結果
    textBox2.Text = SRC;




好吧~我承認有點傷害大家的感情
整個程式碼只有黃色部分取代了之前的迴圈
透過new 關鍵字的宣告 重新宣告 SRC為一個字串物件 而且指定其來源為ArraySRC 也就是已經被我們反轉過順序的陣列
透過這樣的方法 我們只要直接將"新的"SRC取出他的字串就可以了 而不需要使用迴圈的方式
當然這是只有在反轉整段字串時才有用的方法 如果程式需要做比對或者判斷.或者替代~當然還是免不了要使用迴圈
有興趣的朋友可以將上面兩段程式碼進行測試
然後給一段很長的字串(幾百個字就行了)進行測試 就可以發現其效能上的差異了

ADOLPH 發表在 痞客邦 留言(2) 人氣()

1 2
Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。