工作学习笔记——近期的几个技术问题
来源:互联网 发布: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主键属性的检查和增删方法。
- 工作学习笔记——近期的几个技术问题
- 近期工作与学习技术总结
- 近期工作与学习技术总结
- 近期学习路线的问题
- 近期工作笔记
- 工作学习笔记——comboBox抢占焦点问题,以及工作学习的想法
- 近期工作学习记录
- 工作学习笔记——Alljoyn技术、初试Android开发
- 近期学习的集合框架学习笔记
- 近期遇到的几个Solaris 10 的问题
- 近期的工作
- 近期的工作体会
- 近期工作的总结
- 游戏编程入门学习笔记34——中场休息——近期的一些心得
- 近期工作中遇到的一些问题总结
- 近期工作中遇到的问题及其解决办法
- 【20151120】近期学习笔记
- 近期关注的技术
- 2011TCO Qual Round A
- 查找纯win32c++程序的内存泄漏
- 中国IT实验室的java方面的视频
- springside3里面的hibernate
- 使用VC++和CRT库定位和排除内存泄漏
- 工作学习笔记——近期的几个技术问题
- solr启动时报错java.nio.channels.OverlappingFileLockException
- RichEdit 小结
- Socket(TCP/UDP)及服务器、应用层协议(Http/FTP/SIP/Mega/SNMP)及服务器(Apache/FTPServer/SipProxy/MegaServer/SNMPServe
- 批量转换(unix->dos)
- 广度优先搜索算法(BFS)
- fork()里的一个小疑问(缓冲区)
- RDF与XML的区别(Why RDF model is different from the XML model )
- CSDN积分规则详解--【叶子】