工作学习笔记——近期的几个技术问题

来源:互联网 发布:python单例模式 编辑:程序博客网 时间:2024/05/16 04:51

一、BREW Mod调子Mod函数,dll调dll

前几天和同事关于BREW Mod调函数,dll调dll这两个事打了赌,结果我都赌赢了:)

 

如果明白了BREW Applet的启动工程,这两个事情其实是很简单的。利用Mod调Mod,把子Mod中的函数指针返回给父Mod,父Mod就可以调用子Mod中的函数了。利用函数名字符串调用子Mod中的函数,同理也可以办到。

 

dll调dll更没有难度,毕竟BREW Applet本身就是个被模拟器调用的dll。在Applet中正常的写调用Win32 dll的代码就可以了。

 

二、C#导入导出Excel

策划强烈要求在游戏的表格编辑器中加入这项功能。查阅了网上的资料,还是颇费了一番功夫。

 

a.导入Excel

使用OleDb接口,将Excel视做数据库,就可以操纵Excel里的数据了。我将Excel读入到DataTable中,可惜没有找到直接将DataTable更新到数据库或者另一个DataTable中的方法(使用DataTable的Merge方法,好像会有一些数据类型转换上的问题),而是一条记录一条记录更新的。

要是有SQL语句可以直接将一个数据库中的表导入到另外一个数据库就更好了。SQL不熟,应该有这种可能。

 

b.导出Excel

如果源数据库是ACCESS就好说了,一条语句搞定

 

"SELECT * INTO [C:/temp/data source.xls].[Sheet2] FROM TableName"

 

可惜我们的源数据库还可能是SQL SERVER。应该是SQL SERVER的数据库驱动不支持上面的这种写法。结果只好使用Microsoft.Office.Interop.Excel这里的类和接口来建立Excel文件,一个单元格一个单元格的导出数据。这样要求机器上必须安装Excel程序。

 

因为Excel表不像数据库,不会记录每一列的类型。它实际上是靠一些记录来推测列的数据类型的。实际应用中还可能碰到各种问题。

http://www.xtremevbtalk.com/showthread.php?p=969622#post969622

这个网页算是总结.Net的Excel操作比较全的地方。

 

三、DataGridView控件的一些使用技巧

我们工具的表格使用的是DataGridView控件。策划要求一些效果

a.列宽容易调整

设置AutoSizeColumnsMode即可,值为Fill的话会填充满整个窗体,但是没有水平滚动条,手动调整的话不是很容易。我最后用的是AllCells方式,列狂自动设为显示全所有单元格,这样就没有必要手动调整了。但是这种模式下看后边列的时候,因为滚动条,可能就看不到开始的几列了,也不容易快速确定某个单元格是不是在当前行上。这就引出了下一格需求。

 

b.可以方便的知道当前编辑的是哪一行

我们表格的第一列是名称,通过这一列可以确认一行数据。我将DataGridView.Rows的HeaderCell.Value值设为名称列的值,相当于行的标题。而行的标题,无论滚动条如何滚动,都是会显示在屏幕上的。注意单击一列排序时,控件的行标题值会丢失,需要在Sorted事件中重新填入。

 

另外我在dataGridView.CellEnter事件中改变了当前行的颜色,这样用户就能快速确定当前编辑的单元格属于哪一行了。

 

c.某些列的单元格可以用下拉列表来操作。

可以使用DataGridViewComboBoxColumn列类型,但是需要手动替换普通列,使用起来比较麻烦。我是在DataGridView控件中加进一个comboBox控件,平常隐藏起来。编辑需要下拉框的菜单时,将这个comboBox放置到当前单元格上来完成的。

 

四、使用SQL语句去掉数据库中某个表某一列的自动增长(标识列)属性

ACCESS数据库中,自动增长和整数型是两种不同的数据类型,直接使用ALTER语句将自动增长类型修改为整数类型即可

 

ALTER TABLE TableName ALTER COLUMN columnName INT NOT NULL

 

如果是SQL SERVER数据库,标识属性是区别于数据类型的另外一种属性,不能用上面的方法。需要靠备份标识列到普通整数列,删除标识列,再将普通整数列改名的方式来完成。注意标识列一般也是主键列,需要先去掉主键属性才能删除。在网上能搜到SQL SERVER主键属性的检查和增删方法。