记录几个问题的解决:
(一)很牛逼,头一次见这个问题,因为 DataGridView 要再次填充数据,头一次发现可以清,估计是本身没有数据吧,但第二次清空的话就出现这个问题了。
分析原因:
仔细查看代码,发现 DataGridView 是有 DataTable 数据源 绑定的。
就是这个样子 DataGridView .datasource = ds.Tables["expert"];
解决办法如下:
删除这样的代码,采用 foreach 循环填入的方式,
DataSet ds = ExcelToDataSet(resultFile, out strMsg);
DataTable dt = ds.Tables["expert"];
if (dt.Rows.Count > 0) {
foreach (DataRow dr in dt.Rows) {
Dgv_Expert.Rows.Add(false, dr["code"].ToString(), dr["name"].ToString(), dr["sex"].ToString(), dr["birthDay"].ToString(), dr["phone"].ToString(), dr["tel"].ToString(), dr["aid"].ToString(), dr["idcard"].ToString(), dr["company"].ToString(), dr["mid"].ToString(), dr["rid"].ToString(), dr["note"].ToString());
}
}
(二)在A机上开发的winform程序 在放入B机或者C机上继续开发,你会遇到各种问题,烦躁的不行啊。
excel导入导出采用的是npoi方式,A机上运行好好的,结果B机或C机就不能运行了,各种报错,难以招架啊!
Excel不能导入了
移除原先的NPOI引用,重新引入一样的版本,结果是能导入了,但老是恶心的出现如下错误:
引发的异常:“NPOI.OpenXml4Net.Exceptions.InvalidFormatException”(位于 NPOI.OpenXml4Net.dll 中)
最后没办法,我有两个版本呢,这个用的是4.0版本的 NPOI , 那我换 2.0,最后试了下,可以了。
不管哪个版本的,都要引入这四个引用
(三)最后一个说下C#如何判断文件是否被占用的问题
我觉得神马用进程是否开启判断,或者文件流只读方式打开判断的全扯淡。
最后有一个相中的:
class CheckFile
{
private const int OF_READWRITE = 2;
private const int OF_SHARE_DENY_NONE = 0x40;
private static readonly IntPtr HFILE_ERROR = new IntPtr(-1);
/// <summary>
/// 判断文件是否打开
/// </summary>
/// <param name="lpPathName">文件名称</param>
/// <param name="iReadWrite"></param>
/// <returns></returns>
[DllImport("kernel32.dll")]
private static extern IntPtr _lopen(string lpPathName, int iReadWrite);
/// <summary>
/// 关闭文件句柄
/// </summary>
/// <param name="hObject"></param>
/// <returns></returns>
[DllImport("kernel32.dll")]
private static extern bool CloseHandle(IntPtr hObject);
/// <summary>
/// 文件名称
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public static int FileIsOpen(string fileFullName)
{
if (!File.Exists(fileFullName))
{
return -1;
}
IntPtr handle = _lopen(fileFullName, OF_READWRITE | OF_SHARE_DENY_NONE);
if (handle == HFILE_ERROR)
{
return 1;
}
CloseHandle(handle);
return 0;
}
}
这个说实话,用的我心有点凉,但是比起其他方法好像又爽很多,这代码看别人的,但是呢 方法体我改过,至今不明白这代码的详细处理情况,这是不是很尴尬!
用这个程序呢,VS2017编译还警告好多问题,如下:
可气的是你还不能修改,如果你修改了,上面文件判断的方法立马跟你翻脸,不给你返回你需要的。
这说明什么,不要乱动,警告里面的你认识的,改了肯定没错的,有把握的,你就尽量改,剩下的不影响程序运行就留的吧!
(四)调试运行的没有问题,但是一打包运行就有各种问题,能加的我都加了,什么文件皮肤,路径,图片资源,NND就是有问题,你能把我怎么着,小子继续琢磨吧,低头研究改吧,只能顺着来,唉,难啊