导读:
1.数据绑定。
DataReader 读取数据,用DataTable.Load(IDataReader)方法将数据加载到 DataTable ,用DataGridView 显示输出。不要把DataGridView直接绑定到DataReader的目的是数据导出到Excel时,数据源可以再次从DataGridView获得。
不要在 DataGridView 内编辑添加数据,因为数据类型检查不严格(或要严格检查类型需要花费更大的成本)。
2.数据导出到 Excel 。
代码如下:
/**//// <summary>
///
/// ** DataTable 数据导出到 Excel **
///
/// Author: 周振兴 (Zxjay 飘遥)
///
/// E-Mail: tda7264@163.com
///
/// Blog: http://blog.csdn.net/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[,]下标是从1,1开始的,而不是0,0。
3.防止子窗口重复打开,确保某一子窗口只打开一次。
代码为:
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 区分类同信息。
硬编码方式容易造成混乱。如本系统的常用电话/常用网址,数据项都为:名称-内容-备注,可将它们保存在同一个表中,在程序中为区分信息类型,可定义以下枚举:
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相比只增强了打印功能。通过该控件,可设置文本字体、颜色、对齐方式、粘贴图片,可打印看上去很专业的文档,截图如下:
7.保存富文本格式到数据库。
以二进制格式保存。保存的代码为:
MemoryStream ms = new MemoryStream();
rtbContent.SaveFile(ms, RichTextBoxStreamType.RichText);
byte[] bt=ms.ToArray(); //将bt保存到数据库
读取的代码为:
byte[] bt = (byte[])SqlHelper.ExecuteScalar(sqlStr, null);
MemoryStream ms = new MemoryStream(bt, false);
rtbContent.LoadFile(ms, RichTextBoxStreamType.RichText);
在SQLServer中对应的数据类型为:image
8.管理员权限控制。
管理员信息表中权限字段保存一个字符串,拥有该项权限则在字符串相应位置保存为1,没有该项权限为0。在管理员登录时判断权限,启用或禁用相应的菜单项。
9.信息分类。
如客户分类分为:软件客户、网站客户、合作客户等。如果数据量不是太大,可不用单独建立分类表,在添加的时候,客户类型。可用ComboBox,在Form加载时检索数据库中已有的客户类型填充到ComboBox中。这样可选择已有客户类型,也可以添加新的客户类型。
10.数据库安装。
不必集成在安装包中,可单独写一个WinForm程序来收集连接服务器的信息(服务器地址、数据库名、用户名、密码等),并执行数据库生成的脚本来建立数据表,视图,存储过程、索引等。
读取保存数据库脚本文件的代码:
public static string ReadDBScript(string fileName)
...{
StreamReader sr = new StreamReader(fileName);
return sr.ReadToEnd();
}
注意:数据库生成的脚本必须把"GO"去掉,否则执行时报错。
11.安全控制。
由于是网络版系统,因而安全性要考虑周全。数据库连接字符串加密保存在配置文件中。为了防止软件XCopy到其它机器中,可以取机器的硬件(如硬盘、网卡、CPU)序列号的一部分再加上自己的私有密钥作为连接字符串的加密密钥(八位ASCII),确保密钥的私密性、每机器唯一性。
(1)取得机器CPU的ID的前八位作为密钥:
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);
}
(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)数据库连接字符串保存到配置文件:
public static void SaveToConfig(string connStr)
...{
XmlDocument doc = new XmlDocument();
string fn = "zxjay.exe.config";
doc.Load(fn);
XmlNodeList nodes = doc.GetElementsByTagName("add");
for (int i = 0; i < nodes.Count; i++)
...{
XmlAttribute att = nodes[i].Attributes["key"];
if (att.Value == "SQLConectionString")
...{
att = nodes[i].Attributes["value"];
att.Value = connStr;
break;
}
}
doc.Save(fn);
}
本文转自
http://dotnet.csdn.net/page/f9e8e74c-7e8f-447e-b3fb-1be4498d8ba5
分享到:
相关推荐
在这种场景下,".NET B/S系统中引用Winform控件"是一个有效的解决方案,它利用了ActiveX技术来实现Web页面与Windows窗体控件的通信。下面将详细介绍这个知识点及其相关技术。 首先,了解ActiveX:ActiveX是微软提出...
本项目“C/S Winform下客户端自动更新程序”专注于解决这一需求,利用.NET框架进行开发,旨在简化更新流程,减少用户手动干预。 首先,服务端需搭建一个FTP(文件传输协议)服务器,这通常是通过安装FTP服务器软件...
.NET框架下的C/S(客户端/服务器)和B/S(浏览器/服务器)架构是软件开发中的两种常见模式。在这些架构中使用SQLite,一个轻量级、无服务器的嵌入式数据库,可以为小型应用程序提供数据存储解决方案。SQLite因其小巧...
Asp.net(c#) b/s通过ActiveX和C# c/s 调用斑马TLP2844条码打印机 通过web打印条码 源代码
使用c#语言编写的winform程序,实现顺序表、单链表、顺序栈、冒泡排序、折半查找 源代码和程序展示: 顺序表:https://blog.csdn.net/HAIIAKU/article/details/119302855 单链表:...
《SunnyUI.NET:C# WinForm开发的全方位利器》 在软件开发的世界里,高效且功能丰富的开发框架是程序员的得力助手。SunnyUI.NET便是这样一款专为C# WinForm开发者量身定制的开源框架,它支持.NET Framework 4.0及...
在.NET框架中,WinForm应用是开发桌面图形用户界面(GUI)的一种常见方式。本资源提供的是一套基于C#和GDI+实现的WinForm流程图绘制代码,它允许用户在界面上动态拖动和即时刷新流程图元素,非常适合用于创建自定义...
ActiveReports.net3 注册版保证可用
地址:http://download.csdn.net/detail/cleopard/5636223 第二卷:C#开发实战1200例.z02 地址:http://download.csdn.net/detail/cleopard/5638549 由于上传限制,压缩包分成3卷 解压时需要分别把三个部分下载...
ASP.NET编程知识之GMap.Net地图插件在WinForm和WPF中的应用 GMap.Net是一款功能强大且灵活的地图插件,它可以在WinForm和WPF应用程序中使用,以提供丰富的地图显示和交互功能。下面我们将详细介绍如何在WinForm和...
Winform开发框架源码 devexpress 管理系统源码 C# .NET 多主题 net开发框架,通用权限管理系统,仓库管理系统源码。 开发模式:C/S C/S采用的是dev14.1插件,界面美观大方,多种主题切换,是目前最流行的UI插件。 ...
- **WinForm**:基于.NET Framework的Windows桌面应用程序开发框架。 - **WebForm**:是ASP.NET的一部分,用于构建动态Web应用程序,它提供了一种类似桌面应用程序的编程模型。 2. **关键特性**: - **多样的...
本课程通过一个个实战的案例,详细介绍了在WPF编程中用到的各种技巧,帮你进一步掌握WPF这种优秀的编程框架。也许你曾经为了一个WPF又酷又炫的功能,查遍资料却终无所获,最后无奈遗憾放弃。如果你学习了这门课程,...
本文将详细解析一个基于.NET框架,利用C#编程语言和WinForm技术开发的超市管理系统。该系统经过作者一个月的努力,实现了3层架构设计,具有很高的学习和参考价值。 1. .NET框架基础 .NET框架是微软公司推出的一种...
地址:http://download.csdn.net/detail/cleopard/5636223 这是第二卷 第三卷:马上传 由于上传限制,压缩包分成3卷 解压时需要分别把三个部分下载下来 不要更改文件名,放到同一个文件夹内 这样才能正确解压!...
【 DotNET_CS(WinForm) 开发技巧点滴】 在.NET框架下的C/S(客户端/服务器)应用程序开发中,WinForm是一种常见的用户界面技术。这里我们探讨一些开发中的实用技巧,这些技巧可以帮助提升开发效率和软件质量。 1. ...
在C#编程环境中,开发一个WinForm应用,实现用户登录并仅能查看自己信息的功能是一项常见的任务。这个功能主要用于确保数据安全性和用户隐私,避免未经授权的访问或修改。以下是基于标题和描述中提及的问答场景,对...
SunnyUI.Net是一款针对C# .Net WinForm平台设计的开源控件库,它提供了丰富的UI元素和实用的工具类库,旨在简化Windows桌面应用程序的开发工作,提高开发效率。这款框架不仅包含了基础的控件扩展,还集成了多页面...
本课题研究的网吧计费系统是一款基于C/S结构,采用Access数据库,利用Visual Basic.net设计开发的网吧计费系统。文中主要介绍了系统的基本功能和系统结构组成情况,内容包括系统需求分析、系统设计原则、系统设计...
.NET的WinForm皮肤控件是开发Windows桌面应用程序时的一个重要工具,它极大地提升了应用程序的视觉效果和用户体验。在传统的WinForm应用中,界面通常显得较为单调,而通过使用皮肤控件,开发者可以轻松地为应用添加...