开发一个小工具重温C#经典问题
利用业余时间为公司的国际化开发一个小工具,功能很简单,但可以重新温习C#的一些经典问题。
在哈希表中添加一个keyvalue键值对:HashtableObject.Add(key,value);
在哈希表中去除某个keyvalue键值对:HashtableObject.Remove(key);
从哈希表中移除所有元素: HashtableObject.Clear();
判断哈希表是否包含特定键key: HashtableObject.Contains(key);
下面控制台程序将包含以上所有操作:
using System;
using System.Collections; file使用Hashtable时,必须引入这个命名空间
class hashtable
{
public static void Main()
{
Hashtable ht=new Hashtable(); file创建一个Hashtable实例
ht.Add(E,e);添加keyvalue键值对
ht.Add(A,a);
ht.Add(C,c);
ht.Add(B,b);
string s=(string)ht[A];
if(ht.Contains(E)) file判断哈希表是否包含特定键,其返回值为true或false
Console.WriteLine(the E keyexist);
ht.Remove(C);移除一个keyvalue键值对
Console.WriteLine(ht[A]);此处输出a
ht.Clear();移除所有元素
Console.WriteLine(ht[A]); file此处将不会有任何输出
}
}
遍历哈希表需要用到DictionaryEntry Object,代码如下:
for(DictionaryEntry de in ht) fileht为一个Hashtable实例
{
Console.WriteLine(de.Key);de.Key对应于keyvalue键值对key
Console.WriteLine(de.Value);de.Key对应于keyvalue键值对value
}
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); // 打开文件的默认位置
fileName = ofd.FileName;// 获得选择的文件路径
textBox1.Text = fileName;
fbd.ShowDialog();
folderName = fbd.SelectedPath; //获得选择的文件夹路径
textBox3.Text = folderName;
using语句,定义一个范围,在范围结束时处理对象。
场景:
当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便。
例如:
这里触发cls1和cls2的Dispose条件是到达using语句末尾或者中途引发了异常并且控制离开了语句块。
2{
3lvSearchResult.Clear();
4
5//设置listView的显示属性
6lvSearchResult.GridLines=false;
7lvSearchResult.FullRowSelect=true;
8lvSearchResult.View=View.Details;
9lvSearchResult.Scrollable=true;
10lvSearchResult.MultiSelect=false;
11lvSearchResult.HeaderStyle=ColumnHeaderStyle.Nonclickable;
12
13//针对数据库的字段名称,建立与之适应显示表头
14lvSearchResult.Columns.Add("用户呢称",150,HorizontalAlignment.Right);
15lvSearchResult.Columns.Add("移动电话",100,HorizontalAlignment.Left);
16lvSearchResult.Columns.Add("电子邮箱",150,HorizontalAlignment.Left);
17
18//添加列表项
19for(intindex=0;index<5;index++)
20{
21ListViewItemitem=newListViewItem();
22item.SubItems.Clear();
23item.SubItems[0].Text="Name"+index.ToString();
24item.SubItems.Add("Phone"+index.ToString());
25item.SubItems.Add("Email"+index.ToString());
26lvSearchResult.Items.Add(item);
27
28}
29}
8.1.加载Excel(读取excel内容)返回值是一个DataSet
- //加载Excel
- publicstaticDataSetLoadDataFromExcel(stringfilePath)
- {
- try
- {
- stringstrConn;
- strConn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+filePath+";ExtendedProperties='Excel8.0;HDR=False;IMEX=1'";
- OleDbConnectionOleConn=newOleDbConnection(strConn);
- OleConn.Open();
- Stringsql="SELECT*FROM[Sheet1$]";//可是更改Sheet名称,比如sheet2,等等
- OleDbDataAdapterOleDaExcel=newOleDbDataAdapter(sql,OleConn);
- DataSetOleDsExcle=newDataSet();
- OleDaExcel.Fill(OleDsExcle,"Sheet1");
- OleConn.Close();
- returnOleDsExcle;
- }
- catch(Exceptionerr)
- {
- MessageBox.Show("数据绑定Excel失败!失败原因:"+err.Message,"提示信息",
- MessageBoxButtons.OK,MessageBoxIcon.Information);
- returnnull;
- }
- }
8.2.写入Excel内容,参数:excelTable是要导入excel的一个table表
- publicstaticboolSaveDataTableToExcel(System.Data.DataTableexcelTable,stringfilePath)
- {
- Microsoft.Office.Interop.Excel.Applicationapp=
- newMicrosoft.Office.Interop.Excel.ApplicationClass();
- try
- {
- app.Visible=false;
- WorkbookwBook=app.Workbooks.Add(true);
- WorksheetwSheet=wBook.Worksheets[1]asWorksheet;
- if(excelTable.Rows.Count>0)
- {
- introw=0;
- row=excelTable.Rows.Count;
- intcol=excelTable.Columns.Count;
- for(inti=0;i<row;i++)
- {
- for(intj=0;j<col;j++)
- {
- stringstr=excelTable.Rows[i][j].ToString();
- wSheet.Cells[i+2,j+1]=str;
- }
- }
- }
- intsize=excelTable.Columns.Count;
- for(inti=0;i<size;i++)
- {
- wSheet.Cells[1,1+i]=excelTable.Columns[i].ColumnName;
- }
- //设置禁止弹出保存和覆盖的询问提示框
- app.DisplayAlerts=false;
- app.AlertBeforeOverwriting=false;
- //保存工作簿
- wBook.Save();
- //保存excel文件
- app.Save(filePath);
- app.SaveWorkspace(filePath);
- app.Quit();
- app=null;
- returntrue;
- }
- catch(Exceptionerr)
- {
- MessageBox.Show("导出Excel出错!错误原因:"+err.Message,"提示信息",
- MessageBoxButtons.OK,MessageBoxIcon.Information);
- returnfalse;
- }
- finally
- {
- }
- }
C#中的Dataset就像一个数据库,有多个表(Table),一般只有一个表,然后每个表中有行(DataRow)和列(DataColumn),DataRow[DataColumn]可以得到某行某列数据。
foreach (DataTable dt in YourDataset.Tables)
{
foreach (DataRow dr in dt.Rows)
foreach (DataColumn dc in dt.Columns)
Console.WriteLine("{0}, {1}, {2} ", dt.TableName, dc.ColumnName,
dr[dc]);
}
然后读取一行改一行
再把改好的每一行存入到另一个文件里
就是说边改边存
全部改好后删除源文件,重命名新文件名为源文件名