2010年6月29日 星期二

ASP.NET 動態MENU

最近發現了剛剛那文章的RUNATSERVER功能後
就發現UL的MENU就可以設定為動態的了
這樣做可以依照使用者權限不同
登入的MENU也就不同

前端的頁面

<ul id="menuulmaster">
<li><a href="main.aspx">主頁</a></li>
<li><a href="">瀏覽</a></li>
<li><a href="">修改</a></li>
<li runat="server" id="ulliset"><a href="">設定</a></li>
<li><a href="">登出</a></li>
</ul>

後端的頁面

if (Convert.ToInt32(Session["Level"]) == 1) //如果權限不足
{
ulliset.Visible = false; //關閉設定頁面
}


這樣就可以達到不顯示的功能
另外記得在頁面寫個判斷權限的設定
不然被知道網址後 還是有可能被直接用網址登入喔 XDDD

ASP.NET RunAt Server

原來元件給他runat="server"
後再給他 id="test"

就可以直接在.CS頁面編輯它了
test.Visible = false;
嗯....

2010年6月24日 星期四

SQL Profiler 分析(1)

上網查了一下資料
發現了這個TSQL的語法可以查Profiler的效能
所以貼上來


SELECT * into #Temp
FROM ::fn_trace_gettable('D:\CGW\SQL Profiler\testGameDB81_100603.trc', default) --檔案路徑及名稱

-- 追蹤所得的資料本來就在資料表內,直接透過T-SQL 分析
SELECT SUBSTRING(TextData, 1,330) AS '名稱',
COUNT(*) '數量',
AVG(Duration) AS '平均執行時間(ms)',
AVG(CPU) AS '平均CPU 時間(ms)',
AVG(Reads) AS '平均閱讀次數',
AVG(Writes) AS '平均寫入次數'
FROM #Temp
WHERE EventClass=12 -- 12 代表SQL:BatchCompleted 事件
GROUP BY SUBSTRING(TextData, 1,330)
ORDER BY SUM(Duration) DESC


出處:http://blog.xuite.net/tim0718/note/21899219

2010年6月16日 星期三

C# String 字元

驚!!!!
原來 C# string 可以直接讀字元
抱歉 剛剛才發現 XDDD


string words = "Hello World!";
textBox1.Text = words[0] ;


words[0] <==這可以直接讀出H字元出來!!! 現在才知道 囧

C# Ping

ping 這東西很常用
所以 C#當然也有支援囉
看CODE吧


try
{
Ping ping = new Ping();
PingReply pingreply = ping.Send("127.0.0.1");//IP Address
MessageBox.Show(pingreply.Status.ToString());
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}

C# 抓Mac Address

在前人的CODE內發現的
是引用Windows內建的dll去抓Mac Address
還不錯
就貼上來


[DllImport("iphlpapi.dll", ExactSpelling = true)]
public static extern int SendARP(int DestIP, int SrcIP, byte[] MacAddr, ref uint PhyAddrLen);
static object[] GetRemoteMAC(IPAddress LocalIP, IPAddress RemoteIP) //抓Mac
{
byte[] MacAddr = new byte[6];
uint PhyAddrLen = (uint)MacAddr.Length;
string temp = "";
//LiveAndMAC[0]是否有回應 LiveAndMAC[1] MAC
object[] LiveAndMAC = new object[2];

int res = SendARP((int)RemoteIP.Address, (int)LocalIP.Address, MacAddr, ref PhyAddrLen);
//如果有回達 res就是0
if (res == 0)
{
for (int i = 0; i < PhyAddrLen; i++)
{
//轉成看得懂的MAC型態
temp += MacAddr[i].ToString("x2") + "-";
}
//減掉最後一個"-" 並轉成大寫 如果temp長度為0 就代表有回應但沒有MAC 以沒有回應處理
if (temp.Length != 0)
{
temp = (temp.Remove(temp.Length - 1, 1)).ToUpper();
LiveAndMAC[0] = 1;
LiveAndMAC[1] = temp;
}
else
{
LiveAndMAC[0] = 0;
LiveAndMAC[1] = "";
}

return LiveAndMAC;
}
else
{
LiveAndMAC[0] = 0;
LiveAndMAC[1] = "";

return LiveAndMAC;
}
}


PS...補充一下
IPAddress LocalIP = IPAddress.Parse("0.0.0.0"); //ip宣告的方式

2010年6月15日 星期二

VS.NET [神技]快速排版

今天亂找資料時候
忽然發現這招神技
快速排版
當你的CODE很亂時候
沒有排好
沒有對好
整個如戰場一樣亂的不行

來來來
教你神技
Ctrl+A
Ctrl+K
Ctrl+D
這三個按下去
您可愛的CODE整整齊齊
乾乾淨淨
哇靠 太神了!!!!

2010年6月9日 星期三

Asp.net Master 會更改元件id值問題

因為Master會自動更新元件id值
結果導致JavaScript的一些依造id判別的檔案全部都掛了 囧
所以就找方法

結果有大大分享這方法
試了一下 可以跑
就貼上來分享
^_^

後端的CODE

public void RenderJSArrayWithCliendIds(params Control[] wc)
{
if (wc.Length > 0)
{
StringBuilder arrClientIDValue = new StringBuilder();
StringBuilder arrServerIDValue = new StringBuilder();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Now loop through the controls and build the client and server id's
for (int i = 0; i < wc.Length; i++)
{
arrClientIDValue.Append("\"" +
wc[i].ClientID + "\",");
arrServerIDValue.Append("\"" +
wc[i].ID + "\",");
}

// Register the array of client and server id to the client
cs.RegisterArrayDeclaration("MyClientID",
arrClientIDValue.ToString().Remove(arrClientIDValue.ToString().Length - 1, 1));
cs.RegisterArrayDeclaration("MyServerID",
arrServerIDValue.ToString().Remove(arrServerIDValue.ToString().Length - 1, 1));

// Now register the method GetClientId, used to get the client id of tthe control
cs.RegisterStartupScript(this.Page.GetType(), "key",
"\nfunction GetClientId(serverId)\n{\nfor(i=0; i "\n{\nif ( MyServerID[i] == serverId )\n" +
"{\nreturn MyClientID[i];\nbreak;\n}\n}\n}", true);
}
}


前端JS的CODE

var TextBox = document.getElementById(GetClientId("txtTest"));



出處:http://www.codeproject.com/KB/scripting/Masterpage-Javascript.aspx

2010年6月8日 星期二

C# .CS 上寫Javascript


string script = "<script type=\"text/javascript\">alert('連線狀態:"+xxx+",連線時間:" + time + "');</script>";
Page.ClientScript.RegisterStartupScript(typeof(Page), string.Empty, script);


PS...後來發現 常常會發生無法新增的問題
原來是string.Empty <==這是KEY
如果打一樣他會一直重複更新這個
導致所有功能只有一個能跑

所以要直接給他"字串"<==的東西 給它個名字 每個都不同 這樣就行了

C# Extension

主要是新增一個在 .後面可以新增你自己寫的Function
所以
就是
很簡單
新增一個.cs 名字叫ToStringCheckNull 貼上這段範例就行了
看範例吧

using System;
using System.Text;

public static class ToStringCheckNull
{
///
/// ToString時會檢查是否為Null 如果為Null將回傳Null
///

public static string ToStringCheckNull(this object CheckNullValue)
{
string ReturnValue = null;
if (CheckNullValue != null)
ReturnValue = CheckNullValue.ToString();
return ReturnValue;
}
}


重點在public static string ToStringCheckNull(this object CheckNullValue)
public 跟 static 跟 this

CSS 初研究

不太懂 先亂紀錄一下

沒打直接打值表示全套用
前面有 . 表示Class
前面有 # 表示Id

然後 空格 就是子層
例如 .xx Table 表示 xx 的Class 下的Table 套用這屬性值

C# DataTable 左右合併 To LinQ


一般DataTable合併就只是上下合併
但像我又想要讓他左右合併
我又不想寫For迴圈讓他跑
所以 哈哈哈 我就用了LinQ 讓他們緊緊結合在一起了

private DataTable LinqMerge(DataTable DataTable1, DataTable DataTable2)
{
DataTable LinqdataTable = new DataTable();
try
{
var linqMerge =
from DataRow a in DataTable1.Rows
join DataRow b in DataTable2.Rows on a.Field("Order") equals b.Field("Order")
orderby a.Field("Order")
select new { IP1 = a.Field("IP"), Set1 = a.Field("Set"), IP2 = b.Field("IP"), Set2 = b.Field("Set") };

LinqdataTable = LinqQueryToDataTable(linqMerge);
return LinqdataTable;
}
catch
{
return LinqdataTable;
}
}

這是利用他們排序後的IP值 合併的
用這方法前提是 他們有共通的Columns可以合併
像我範例就是Order欄位

然後他們就緊緊合在一起了
如果沒共通的Columns就...生出來吧
不然你怎樣讓他左右合併呢
你說是吧

C# LinQ Update To SQL

更新 SQL方法

LinQDataClassesDataContext context = new LinQDataClassesDataContext(); //LinQToSql
var existingCust = (from a in context.IpTable where a.IP == IP select a).First(); //讀出要更新的表的值出來
existingCust.Ip = IP; //將新值IP變數丟進去
context.SubmitChanges(); //更新資料庫


如果要多個就existingCust.Ip = IP; 多幾欄 有啥屬性就丟啥
YA!! 就醬!!!

C# GridView 程式傳DataSource 分頁法

PageIndexChanging觸發加入這個

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}


就可以了 我是用DataTable丟進去的

2010年6月7日 星期一

C# LinQ IP排序

哈哈
之前分享 SQL IP排序方法
可是勒
最近我的心都飄到LinQ上 怎可能不Try It勒


但是勒
哈哈哈
我試不出來 Orz...
我將IP切開後 OrderBy後 LinQ轉SQL語法時候 他說不支援 囧
我也不知道怎辦 XDDDD

所以
我就用折衷方式
先將表讀出來後 存到DataTable裡後
再排序一次 就好了


var Iplinq =
from a in context.IpTable
where a.IP.Contains(IPblock)
select new { IP = a.IP, IsServer = a.IsServer }; //讀出SQL表格

IpTable = LinqQueryToDataTable(Iplinq); //轉DataTable
var orderbyIP =
from DataRow a in IpTable.Rows
let b = a.Field("IP").Split('.') //切開IP
let ipblock1 = b.GetValue(0)
let ipblock2 = b.GetValue(1)
let ipblock3 = b.GetValue(2)
let ipblock4 = b.GetValue(3)
orderby Convert.ToInt32(ipblock1), Convert.ToInt32(ipblock2), Convert.ToInt32(ipblock3), Convert.ToInt32(ipblock4) //轉成數值在個別排序
select a;

語法一樣 就是 LinQToSql時候出問題 導致不能排序
如果直接丟上上面的SQL那部份就會有錯
應該是......就是有問題吧 XD
如果各位大大有辦法解決 請幫我解答一下 感恩

C# LinQ Like

LinQ 怎樣做到 SQL 語法的Like勒

where a.IP.Contains(IPblock)


就醬
Contains <==LIKE

2010年6月3日 星期四

SQL Performance Profiler Application Name

由於最近在學SQL Proformance 的東西
所以稍為紀錄一下學習過的東西囉

首先是Profiler這個SQL Performance內建軟體
簡單說 它就是在紀錄DB幹了啥好事的軟體
就是將所有動作記錄下來
可是勒
在這個欄位!!!Application Name 總是在連接時候都空的
找了一下資料後 才知道連接字串要把這個加入才會顯示
就是

Data Source=(local);Initial Catalog=DB;Integrated Security=True
Data Source=(local);Initial Catalog=DB;Integrated Security=True;Application Name=AppName

這樣要做分析 就會比較好分析喔

2010年6月2日 星期三

SQL T-SQL 觸發即時同步Table

有時候會用到Table要一模一樣 但是卻要寫兩次
這樣又很麻煩
所以弄了個T-SQL指令 可以同步讓兩個Table同步化
只要在觸發增加下面指令就行了
當然裡面表格跟寫法要自己設定一下
新增修改刪除下面都有 ^^


CREATE TRIGGER [dbo].[datacopy]
ON [dbo].[data]
AFTER INSERT
AS

BEGIN
--SET @name = SELECT a FROM inserted
DECLARE @n01 nvarchar(50),
@n02 nvarchar(50),
@n03 nvarchar(50),
@n04 nvarchar(50),
@n05 nvarchar(50),
@n06 nvarchar(50),
@n07 nvarchar(50),
@n08 nvarchar(50),
@n09 nvarchar(50),
@n10 nvarchar(50),
@n11 nvarchar(50),
@n12 nvarchar(50),
@n13 nvarchar(50),
@n14 nvarchar(50),
@n15 nvarchar(50),
@n16 nvarchar(50),
@n17 nvarchar(50),
@n18 nvarchar(50),
@n19 nvarchar(50),
@n20 nvarchar(50),
@n21 nvarchar(50),
@n22 nvarchar(50),
@n23 nvarchar(50),
@n24 nvarchar(50),
@n25 nvarchar(50),
@n26 nvarchar(50),
@n27 nvarchar(50),
@n28 nvarchar(50),
@n29 nvarchar(50),
@n30 nvarchar(50),
@n31 nvarchar(50),
@n32 nvarchar(50),
@n33 nvarchar(50),
@n34 nvarchar(50),
@n35 nvarchar(50),
@n36 nvarchar(50),
@n37 nvarchar(50),
@n38 nvarchar(50),
@n39 nvarchar(50),
@n40 nvarchar(50),
@n41 nvarchar(50),
@n42 nvarchar(50),
@n43 nvarchar(50),
@n44 nvarchar(50),
@n45 nvarchar(50),
@n46 nvarchar(50),
@n47 nvarchar(50),
@n48 nvarchar(50),
@n49 nvarchar(50),
@n50 nvarchar(50)
select @n01 = i.[n01],
@n02 = i.[n02],
@n03 = i.[n03],
@n04 = i.[n04],
@n05 = i.[n05],
@n06 = i.[n06],
@n07 = i.[n07],
@n08 = i.[n08],
@n09 = i.[n09],
@n10 = i.[n10],
@n11 = i.[n11],
@n12 = i.[n12],
@n13 = i.[n13],
@n14 = i.[n14],
@n15 = i.[n15],
@n16 = i.[n16],
@n17 = i.[n17],
@n18 = i.[n18],
@n19 = i.[n19],
@n20 = i.[n20],
@n21 = i.[n21],
@n22 = i.[n22],
@n23 = i.[n23],
@n24 = i.[n24],
@n25 = i.[n25],
@n26 = i.[n26],
@n27 = i.[n27],
@n28 = i.[n28],
@n29 = i.[n29],
@n30 = i.[n30],
@n31 = i.[n31],
@n32 = i.[n32],
@n33 = i.[n33],
@n34 = i.[n34],
@n35 = i.[n35],
@n36 = i.[n36],
@n37 = i.[n37],
@n38 = i.[n38],
@n39 = i.[n39],
@n40 = i.[n40],
@n41 = i.[n41],
@n42 = i.[n42],
@n43 = i.[n43],
@n44 = i.[n44],
@n45 = i.[n45],
@n46 = i.[n46],
@n47 = i.[n47],
@n48 = i.[n48],
@n49 = i.[n49],
@n50 = i.[n50]

from inserted i
--SELECT a FROM inserted

INSERT INTO [test2].[dbo].[data3]([n01],[n02],[n03],[n04],[n05],[n06],[n07],[n08],[n09],[n10],[n11],[n12],[n13],[n14],[n15],[n16],[n17],[n18],[n19],[n20],[n21],[n22],[n23],[n24],[n25],[n26],[n27],[n28],[n29],[n30],[n31],[n32],[n33],[n34],[n35],[n36],[n37],[n38],[n39],[n40],[n41],[n42],[n43],[n44],[n45],[n46],[n47],[n48],[n49],[n50]) VALUES(@n01,@n02,@n03,@n04,@n05,@n06,@n07,@n08,@n09,@n10,@n11,@n12,@n13,@n14,@n15,@n16,@n17,@n18,@n19,@n20,@n21,@n22,@n23,@n24,@n25,@n26,@n27,@n28,@n29,@n30,@n31,@n32,@n33,@n34,@n35,@n36,@n37,@n38,@n39,@n40,@n41,@n42,@n43,@n44,@n45,@n46,@n47,@n48,@n49,@n50)
END


XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx
CREATE TRIGGER [dbo].[datacopydel]
ON [dbo].[data]
AFTER DELETE
AS

BEGIN
--SET @name = SELECT a FROM inserted
DECLARE @n01 nvarchar(50),
@n02 nvarchar(50),
@n03 nvarchar(50),
@n04 nvarchar(50),
@n05 nvarchar(50),
@n06 nvarchar(50),
@n07 nvarchar(50),
@n08 nvarchar(50),
@n09 nvarchar(50),
@n10 nvarchar(50),
@n11 nvarchar(50),
@n12 nvarchar(50),
@n13 nvarchar(50),
@n14 nvarchar(50),
@n15 nvarchar(50),
@n16 nvarchar(50),
@n17 nvarchar(50),
@n18 nvarchar(50),
@n19 nvarchar(50),
@n20 nvarchar(50),
@n21 nvarchar(50),
@n22 nvarchar(50),
@n23 nvarchar(50),
@n24 nvarchar(50),
@n25 nvarchar(50),
@n26 nvarchar(50),
@n27 nvarchar(50),
@n28 nvarchar(50),
@n29 nvarchar(50),
@n30 nvarchar(50),
@n31 nvarchar(50),
@n32 nvarchar(50),
@n33 nvarchar(50),
@n34 nvarchar(50),
@n35 nvarchar(50),
@n36 nvarchar(50),
@n37 nvarchar(50),
@n38 nvarchar(50),
@n39 nvarchar(50),
@n40 nvarchar(50),
@n41 nvarchar(50),
@n42 nvarchar(50),
@n43 nvarchar(50),
@n44 nvarchar(50),
@n45 nvarchar(50),
@n46 nvarchar(50),
@n47 nvarchar(50),
@n48 nvarchar(50),
@n49 nvarchar(50),
@n50 nvarchar(50)
select @n01 = d.[n01],
@n02 = d.[n02],
@n03 = d.[n03],
@n04 = d.[n04],
@n05 = d.[n05],
@n06 = d.[n06],
@n07 = d.[n07],
@n08 = d.[n08],
@n09 = d.[n09],
@n10 = d.[n10],
@n11 = d.[n11],
@n12 = d.[n12],
@n13 = d.[n13],
@n14 = d.[n14],
@n15 = d.[n15],
@n16 = d.[n16],
@n17 = d.[n17],
@n18 = d.[n18],
@n19 = d.[n19],
@n20 = d.[n20],
@n21 = d.[n21],
@n22 = d.[n22],
@n23 = d.[n23],
@n24 = d.[n24],
@n25 = d.[n25],
@n26 = d.[n26],
@n27 = d.[n27],
@n28 = d.[n28],
@n29 = d.[n29],
@n30 = d.[n30],
@n31 = d.[n31],
@n32 = d.[n32],
@n33 = d.[n33],
@n34 = d.[n34],
@n35 = d.[n35],
@n36 = d.[n36],
@n37 = d.[n37],
@n38 = d.[n38],
@n39 = d.[n39],
@n40 = d.[n40],
@n41 = d.[n41],
@n42 = d.[n42],
@n43 = d.[n43],
@n44 = d.[n44],
@n45 = d.[n45],
@n46 = d.[n46],
@n47 = d.[n47],
@n48 = d.[n48],
@n49 = d.[n49],
@n50 = d.[n50]

from deleted d
--SELECT a FROM inserted
DELETE [test2].[dbo].[data3] WHERE [n01] = @n01
END



XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
CREATE TRIGGER [dbo].[datacopyupdate]
ON [dbo].[data]
AFTER UPDATE
AS

BEGIN
--SET @name = SELECT a FROM inserted
DECLARE @n01 nvarchar(50),
@n02 nvarchar(50),
@n03 nvarchar(50),
@n04 nvarchar(50),
@n05 nvarchar(50),
@n06 nvarchar(50),
@n07 nvarchar(50),
@n08 nvarchar(50),
@n09 nvarchar(50),
@n10 nvarchar(50),
@n11 nvarchar(50),
@n12 nvarchar(50),
@n13 nvarchar(50),
@n14 nvarchar(50),
@n15 nvarchar(50),
@n16 nvarchar(50),
@n17 nvarchar(50),
@n18 nvarchar(50),
@n19 nvarchar(50),
@n20 nvarchar(50),
@n21 nvarchar(50),
@n22 nvarchar(50),
@n23 nvarchar(50),
@n24 nvarchar(50),
@n25 nvarchar(50),
@n26 nvarchar(50),
@n27 nvarchar(50),
@n28 nvarchar(50),
@n29 nvarchar(50),
@n30 nvarchar(50),
@n31 nvarchar(50),
@n32 nvarchar(50),
@n33 nvarchar(50),
@n34 nvarchar(50),
@n35 nvarchar(50),
@n36 nvarchar(50),
@n37 nvarchar(50),
@n38 nvarchar(50),
@n39 nvarchar(50),
@n40 nvarchar(50),
@n41 nvarchar(50),
@n42 nvarchar(50),
@n43 nvarchar(50),
@n44 nvarchar(50),
@n45 nvarchar(50),
@n46 nvarchar(50),
@n47 nvarchar(50),
@n48 nvarchar(50),
@n49 nvarchar(50),
@n50 nvarchar(50)
select @n01 = i.[n01],
@n02 = i.[n02],
@n03 = i.[n03],
@n04 = i.[n04],
@n05 = i.[n05],
@n06 = i.[n06],
@n07 = i.[n07],
@n08 = i.[n08],
@n09 = i.[n09],
@n10 = i.[n10],
@n11 = i.[n11],
@n12 = i.[n12],
@n13 = i.[n13],
@n14 = i.[n14],
@n15 = i.[n15],
@n16 = i.[n16],
@n17 = i.[n17],
@n18 = i.[n18],
@n19 = i.[n19],
@n20 = i.[n20],
@n21 = i.[n21],
@n22 = i.[n22],
@n23 = i.[n23],
@n24 = i.[n24],
@n25 = i.[n25],
@n26 = i.[n26],
@n27 = i.[n27],
@n28 = i.[n28],
@n29 = i.[n29],
@n30 = i.[n30],
@n31 = i.[n31],
@n32 = i.[n32],
@n33 = i.[n33],
@n34 = i.[n34],
@n35 = i.[n35],
@n36 = i.[n36],
@n37 = i.[n37],
@n38 = i.[n38],
@n39 = i.[n39],
@n40 = i.[n40],
@n41 = i.[n41],
@n42 = i.[n42],
@n43 = i.[n43],
@n44 = i.[n44],
@n45 = i.[n45],
@n46 = i.[n46],
@n47 = i.[n47],
@n48 = i.[n48],
@n49 = i.[n49],
@n50 = i.[n50]

from inserted i
--SELECT a FROM inserted
UPDATE [test2].[dbo].[data3] SET [n02] = @n02,[n03] = @n03,[n04] = @n04,[n05] = @n05,[n06] = @n06,[n07] = @n07,[n08] = @n08,[n09] = @n09,[n10] = @n10,[n11] = @n11,[n12] = @n12,[n13] = @n13,[n14] = @n14,[n15] = @n15,[n16] = @n16,[n17] = @n17,[n18] = @n18,[n19] = @n19,[n20] = @n20,[n21] = @n21,[n22] = @n22,[n23] = @n23,[n24] = @n24,[n25] = @n25,[n26] = @n26,[n27] = @n27,[n28] = @n28,[n29] = @n29,[n30] = @n30,[n31] = @n31,[n32] = @n32,[n33] = @n33,[n34] = @n34,[n35] = @n35,[n36] = @n36,[n37] = @n37,[n38] = @n38,[n39] = @n39,[n40] = @n40,[n41] = @n41,[n42] = @n42,[n43] = @n43,[n44] = @n44,[n45] = @n45,[n46] = @n46,[n47] = @n47,[n48] = @n48,[n49] = @n49,[n50] = @n50 WHERE [n01] = @n01
END


[N01_OBSYSTEM].[dbo].[TB_Product_D]

Excel VBA 讀儲存格值


Dim a As Double
If Worksheets("超簡易算盤").Range("B2").Value <> 0 Then
a = Worksheets("超簡易算盤").Range("B1").Value / Worksheets("超簡易算盤").Range("B2").Value
Worksheets("超簡易算盤").Range("B5").Value = a
Else
Worksheets("超簡易算盤").Range("B5").Value = "B值不能等於0"
End If


語法
Worksheets("超簡易算盤").Range("B2").Value

說明:
叫出超簡易算盤資料表的B2儲存格的值 也可直接取代

Excel 跳資料表讀資料

說明:跳試算表讀取欄位方法:
範例:
險種一!E15
試算表名稱!(欄位)

VB.NET DetailsView樣板模式

這應該不用解釋吧 XD

DetailsView1.ChangeMode(DetailsViewMode.Edit) ‘編輯樣板模式
DetailsView1.ChangeMode(DetailsViewMode.Insert) ‘新增樣板模式
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly) ‘讀取樣板模式

Excel VBA 可讀取多筆txt資料

這是可以多筆txt匯入Execl的VBA程式
Try看看吧!!!

Sub inCSV()
x = InputBox("請輸入檔案數量")
Range("a1").Select
For i = 1 To x
If i = 1 Then
z = 1
Else
z = 1
End If
y = ActiveCell.Address
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\xx\" & i & ".txt", Destination:=Range(y))
.Name = "1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 950
.TextFileStartRow = z
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1, 5)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Application.CommandBars("External Data").Visible = False
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
Next
End Sub
Private Sub CommandButton1_Click()
inCSV
End Sub

C# LinQ Top

LinQ就是簡單的
var Top10 =( LinQ語法 ).Take(10);

10就是取十個阿 XDDD

如果單純要Top 1
也可以用
var Top10 =( LinQ語法 ).First();

但是這樣是直接回傳"值" 囉!!!!