版權(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)了十天時間,為公司開發(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ù)據(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)容-備注,可將它們保存在同一個表中,在程序中為區(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)限字段保存一個字符串,擁有該項(xiàng)權(quán)限則在字符串相應(yīng)位置保存為1,沒有該項(xiàng)權(quán)限為0。在管理員登錄時判斷權(quán)限,啟用或禁用相應(yīng)的菜單項(xiàng)。9.信息分類。如客戶分類分為:軟件客戶、網(wǎng)站客戶、合作客戶等。如果數(shù)據(jù)量不是太大,可不用單獨(dú)建立分類表,在添加的時候,客戶類型。可用ComboBox,在Form加載時檢索數(shù)據(jù)庫中已有的客戶類型填充到ComboBox中。這樣可選擇已有客戶類型,也可以添加新的客戶類型。10.數(shù)據(jù)庫安裝。不必集成在安裝包中,可單獨(dú)寫一個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í)行時報(bào)錯。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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024橋梁加固工程承包合同范本3篇
- 2024年高端養(yǎng)殖場土地租賃及合作開發(fā)合同3篇
- 2024年采沙場租賃協(xié)議3篇
- 2025標(biāo)識牌生產(chǎn)與安裝一體化工程合同范本3篇
- 2024年網(wǎng)絡(luò)劇制作剪輯師招聘與管理協(xié)議3篇
- 公路車知識培訓(xùn)課件
- 《現(xiàn)代物流管理教程》課件
- 2024年采購協(xié)議:原材料及產(chǎn)品3篇
- 2024校秋季春季學(xué)期小賣部飲品及零食供應(yīng)與營銷合同3篇
- 鄭州工業(yè)應(yīng)用技術(shù)學(xué)院《互換性與公差配合》2023-2024學(xué)年第一學(xué)期期末試卷
- 職業(yè)安全健康現(xiàn)場檢查記錄表參考范本
- 雨水、排水管道工程質(zhì)量保證措施
- 荒誕派戲劇演示
- 公園景觀改造工程施工組織設(shè)計(jì)方案
- 辦公用品供貨總體服務(wù)方案
- 全國書法作品展投稿登記表
- 鏈條功率選用
- 年產(chǎn)30萬噸合成氨脫碳工段工藝設(shè)計(jì)
- 塑膠產(chǎn)品成型周期公式及計(jì)算
- (完整版)工地常用英語詞匯
- LM-10Y液晶系列全自動振動時效使用說明書
評論
0/150
提交評論