DataGridView 清空行时出现System.ArgumentException:“不能清除此列表。”

记录几个问题的解决:

(一)很牛逼,头一次见这个问题,因为 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就是有问题,你能把我怎么着,小子继续琢磨吧,低头研究改吧,只能顺着来,唉,难啊

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值