版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(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è)置文本字體、顏色、對(duì)齊方式、粘貼圖片,可打印看上去很專業(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中對(duì)應(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ù)表,視圖,存儲(chǔ)過程、索引等。
讀取保存數(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)序列號(hào)的一部分再加上自己的私有密鑰作為連接字符串的加密密鑰(八位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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位人力資源管理制度精彩大全
- 醫(yī)療合作項(xiàng)目合同管理準(zhǔn)則
- 高層住宅外墻清洗項(xiàng)目招投標(biāo)
- 網(wǎng)絡(luò)營銷企業(yè)薪酬管理
- 居民區(qū)通風(fēng)設(shè)備安裝合同
- 天津市養(yǎng)老社區(qū)物業(yè)醫(yī)療服務(wù)規(guī)范
- 紡織服裝弱電施工合同
- 廣東省廣州市天河區(qū)2023-2024學(xué)年高一上學(xué)期期末考試數(shù)學(xué)試卷(解析版)
- 羅定職業(yè)技術(shù)學(xué)院《田徑AⅡ》2023-2024學(xué)年第一學(xué)期期末試卷
- 酒店工程塔吊施工協(xié)議
- 國際金融課后習(xí)題答案(吳志明第五版)第1-9章
- 《WPS演示制作與設(shè)計(jì)》計(jì)算機(jī)應(yīng)用基礎(chǔ)高職??埔坏泉?jiǎng)(含課件制作試題及答案)
- 大英縣“互聯(lián)網(wǎng)+智慧教育”建設(shè)項(xiàng)目 ?招標(biāo)文件(采購)
- GB/T 7533-1993有機(jī)化工產(chǎn)品結(jié)晶點(diǎn)的測定方法
- GB/T 6728-2017結(jié)構(gòu)用冷彎空心型鋼
- 紅色喜慶新年快樂企業(yè)年會(huì)PPT
- 智慧港口信息化平臺(tái)建設(shè)方案
- 水土保持工程學(xué)課程設(shè)計(jì)
- 《牛常見病防治技術(shù)》課件
- 腰椎骨折的圍手術(shù)期護(hù)理詳解演示文稿
- 變壓器變比測試課件
評(píng)論
0/150
提交評(píng)論