DotNET CS(WinForm)開發(fā)技巧點(diǎn)滴_第1頁
DotNET CS(WinForm)開發(fā)技巧點(diǎn)滴_第2頁
DotNET CS(WinForm)開發(fā)技巧點(diǎn)滴_第3頁
DotNET CS(WinForm)開發(fā)技巧點(diǎn)滴_第4頁
DotNET CS(WinForm)開發(fā)技巧點(diǎn)滴_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

.NETC/S(WinForm)開發(fā)技巧點(diǎn)滴【轉(zhuǎn)】

花費(fèi)了十天時(shí)間,為公司開發(fā)了一套簡單的網(wǎng)絡(luò)版的信息管理系統(tǒng),功能主要有客戶信息管理,員工信息管理,常用信息管理(各種信函打印、常用網(wǎng)址/常用電話等),公司簡單的財(cái)務(wù)管理等。把一些點(diǎn)點(diǎn)滴滴的技巧在此記錄下來,以備查用。1.數(shù)據(jù)綁定。DataReader讀取數(shù)據(jù),用DataTable.Load(IDataReader)方法將數(shù)據(jù)加載到DataTable,用DataGridView顯示輸出。不要把DataGridView直接綁定到DataReader的目的是數(shù)據(jù)導(dǎo)出到Excel時(shí),數(shù)據(jù)源可以再次從DataGridView獲得。

不要在DataGridView內(nèi)編輯添加數(shù)據(jù),因?yàn)閿?shù)據(jù)類型檢查不嚴(yán)格(或要嚴(yán)格檢查類型需要花費(fèi)更大的成本)。2.數(shù)據(jù)導(dǎo)出到Excel。代碼如下:///

<summary>

///

///

**

DataTable

數(shù)據(jù)導(dǎo)出到

Excel

**

///

///

Author:

周振興

(Zxjay

飄遙)

///

///

E-Mail:

tda7264@163.com

///

///

Blog:

/zxjay

///

///

Date:

07-08-31

///

///

</summary>

Excel.Application

app

=

new

Excel.Application();

app.Visible

=

false;

Excel.Workbook

wb

=

app.Workbooks.Add(true);

Excel.Worksheet

ws

=

(Excel.Worksheet)wb.Worksheets.Add(Type.Missing,

Type.Missing,

Type.Missing,

Type.Missing);

DataTable

dt

=

(DataTable)dgvClientInfo.DataSource;

for

(int

i

=

0;

i

<

dt.Columns.Count;

i++)

{

ws.Cells[1,

i

+

1]

=

dt.Columns[i].ColumnName;

}

for

(int

j

=

0;

j

<

dt.Rows.Count;

j++)

{

for

(int

k

=

0;

k

<

dt.Columns.Count;

k++)

{

ws.Cells[j

+

2,

k

+

1]

=

dt.Rows[j][k];

}

}

app.Visible

=

true;注意:Excel的Cells[,]下標(biāo)是從1,1開始的,而不是0,0。3.防止子窗口重復(fù)打開,確保某一子窗口只打開一次。代碼為:

foreach

(Form

frm

in

this.MdiChildren)

{

if

(frm

is

WorkerList)

{

frm.WindowState

=

FormWindowState.Normal;

frm.Activate();

return;

}

}

WorkerList

wl

=

new

WorkerList();

wl.MdiParent

=

this;

wl.Show();4.使用枚舉enum區(qū)分類同信息。硬編碼方式容易造成混亂。如本系統(tǒng)的常用電話/常用網(wǎng)址,數(shù)據(jù)項(xiàng)都為:名稱-內(nèi)容-備注,可將它們保存在同一個(gè)表中,在程序中為區(qū)分信息類型,可定義以下枚舉:

public

enum

TelWeb

{

Telephone,WebSite

}5.在ToolStrip中加入其它WinForm控件。如在ToolStrip中加入DateTimePicker。如圖:

DateTimePicker

dt1

=

new

DateTimePicker();

dt1.Width

=

110;

ToolStripControlHost

host1

=

new

ToolStripControlHost(dt1);

host1.Alignment

=

ToolStripItemAlignment.Right;

toolStrip1.Items.Insert(10,

host1);6.用微軟的可打印的富文本框控件打印帶格式的文本。與.NETFX自帶的RichTextBox相比只增強(qiáng)了打印功能。通過該控件,可設(shè)置文本字體、顏色、對齊方式、粘貼圖片,可打印看上去很專業(yè)的文檔,截圖如下:7.保存富文本格式到數(shù)據(jù)庫。以二進(jìn)制格式保存。保存的代碼為:

MemoryStream

ms

=

new

MemoryStream();

rtbContent.SaveFile(ms,

RichTextBoxStreamType.RichText);

byte[]

bt=ms.ToArray();

//將bt保存到數(shù)據(jù)庫讀取的代碼為:

byte[]

bt

=

(byte[])SqlHelper.ExecuteScalar(sqlStr,

null);

MemoryStream

ms

=

new

MemoryStream(bt,

false);

rtbContent.LoadFile(ms,

RichTextBoxStreamType.RichText);在SQLServer中對應(yīng)的數(shù)據(jù)類型為:image8.管理員權(quán)限控制。管理員信息表中權(quán)限字段保存一個(gè)字符串,擁有該項(xiàng)權(quán)限則在字符串相應(yīng)位置保存為1,沒有該項(xiàng)權(quán)限為0。在管理員登錄時(shí)判斷權(quán)限,啟用或禁用相應(yīng)的菜單項(xiàng)。9.信息分類。如客戶分類分為:軟件客戶、網(wǎng)站客戶、合作客戶等。如果數(shù)據(jù)量不是太大,可不用單獨(dú)建立分類表,在添加的時(shí)候,客戶類型??捎肅omboBox,在Form加載時(shí)檢索數(shù)據(jù)庫中已有的客戶類型填充到ComboBox中。這樣可選擇已有客戶類型,也可以添加新的客戶類型。10.數(shù)據(jù)庫安裝。不必集成在安裝包中,可單獨(dú)寫一個(gè)WinForm程序來收集連接服務(wù)器的信息(服務(wù)器地址、數(shù)據(jù)庫名、用戶名、密碼等),并執(zhí)行數(shù)據(jù)庫生成的腳本來建立數(shù)據(jù)表,視圖,存儲過程、索引等。

讀取保存數(shù)據(jù)庫腳本文件的代碼:

public

static

string

ReadDBScript(string

fileName)

{

StreamReader

sr

=

new

StreamReader(fileName);

return

sr.ReadToEnd();

}注意:數(shù)據(jù)庫生成的腳本必須把"GO"去掉,否則執(zhí)行時(shí)報(bào)錯(cuò)。11.安全控制。由于是網(wǎng)絡(luò)版系統(tǒng),因而安全性要考慮周全。數(shù)據(jù)庫連接字符串加密保存在配置文件中。為了防止軟件XCopy到其它機(jī)器中,可以取機(jī)器的硬件(如硬盤、網(wǎng)卡、CPU)序列號的一部分再加上自己的私有密鑰作為連接字符串的加密密鑰(八位ASCII),確保密鑰的私密性、每機(jī)器唯一性。(1)取得機(jī)器CPU的ID的前八位作為密鑰:

public

static

string

GetProcessID()

{

try

{

string

str

=

string.Empty;

ManagementClass

mcCpu

=

new

ManagementClass("win32_Processor");

ManagementObjectCollection

mocCpu

=

mcCpu.GetInstances();

foreach

(ManagementObject

m

in

mocCpu)

{

str

=

m["ProcessorId"].ToString().Trim().Substring(0,

8);

}

return

str;

}

catch

(Exception

ex)

{

return

"zhenxing";

//如果失敗取默認(rèn)的密鑰

}

}

(2)加密算法:

public

static

string

Encode(string

data)

{

byte[]

aKey

=

System.Text.ASCIIEncoding.ASCII.GetBytes(GetProcessID());

byte[]

aIV

=

System.Text.ASCIIEncoding.ASCII.GetBytes(GetProcessID());

DESCryptoServiceProvider

cp

=

new

DESCryptoServiceProvider();

MemoryStream

ms

=

new

MemoryStream();

CryptoStream

cs

=

new

CryptoStream(ms,

cp.CreateEncryptor(aKey,

aIV),

CryptoStreamMode.Write);

StreamWriter

sw

=

new

StreamWriter(cs);

sw.Write(data);

sw.Flush();

cs.FlushFinalBlock();

sw.Flush();

return

Convert.ToBase64String(ms.GetBuffer(),

0,

(int)ms.Length);

}

(3)解密算法:

public

static

string

Decode(string

data)

{

byte[]

aKey

=

System.Text.ASCIIEncoding.ASCII.GetBytes(GetProcessID());

byte[]

aIV

=

System.Text.ASCIIEncoding.ASCII.GetBytes(GetProcessID());

byte[]

Enc;

try

{

Enc

=

Convert.FromBase64String(data);

}

catch

{

return

null;

}

DESCryptoServiceProvider

cp

=

new

DESCryptoServiceProvider();

MemoryStream

ms

=

new

MemoryStream(Enc);

CryptoStream

cs

=

new

CryptoStream(ms,

cp.CreateDecryptor(aKey,

aIV),

CryptoStreamMode.Read);

StreamReader

sr

=

new

StreamReader(cs);

return

sr.ReadToEnd();

}

(4)數(shù)據(jù)庫連接字符串保存到配置文件:

public

static

void

SaveT

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論