关于 datagridview 拖拽文件

敌敌畏耶 2015-01-22 11:34:40
是这样的,一个窗体上有一个 datagridview 控件···
现在我需要拖拽一个文件到这个 datagridview 上。获取这个文件的路径。
我已设置了 datagridview 的 AllowDrop为true,注册了 DragDrop 和DragEnter事件··

DragDrop:

private void dgv_openJsonFile1_DragDrop(object sender,DragEventArgs e) {
MessageBox.Show("dgv_openJsonFile1_DragDrop");
if(!e.Data.GetDataPresent(DataFormats.FileDrop)) {
return;
}
var path = e.Data.GetData(DataFormats.FileDrop) as string[];
if(path != null && path.Length > 0) {
var f = path[0];
if(!string.IsNullOrEmpty(f)) {
MessageBox.Show(f);
}
}
}


DragEnter:

private void dgv_openJsonFile1_DragEnter(object sender,DragEventArgs e) {
MessageBox.Show("dgv_openJsonFile1_DragEnter");
if(e.Data.GetDataPresent(DataFormats.FileDrop)) {
e.Effect = DragDropEffects.Link;
} else {
e.Effect = DragDropEffects.None;
}
}



现在是根本就没有进入这个方法···

不知什么原因··
求解····
...全文
548 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
猴头 2015-01-23
  • 打赏
  • 举报
回复
受教了
敌敌畏耶 2015-01-23
  • 打赏
  • 举报
回复
引用 12 楼 wyd1520 的回复:

  private void dataGridView1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Link;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }

        private void dataGridView1_DragDrop(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                return;
            }
            var path = e.Data.GetData(DataFormats.FileDrop) as string[];
            if (path != null && path.Length > 0)
            {
                var f = path[0];
                if (!string.IsNullOrEmpty(f))
                {
                    MessageBox.Show(f);
                }
            }
        }

首先AllowDrop 属性为true ,没问题呀。。。
引用 10 楼 lwb314 的回复:
你好,首先AllowDrop 属性为true,然后要在DragEnter事件里这么写 private void Form1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Link; else e.Effect = DragDropEffects.None; } 这样就可以得到拖到文件的路径了,任意文件 private void Form1_DragDrop(object sender, DragEventArgs e) { string[] filePath = (string[])e.Data.GetData(DataFormats.FileDrop); foreach (string file in filePath ) { //file就是单个文件路径 } }
最后问题解决了··· 是因为权限的问题。 http://blog.csdn.net/yuekunge/article/details/43019245
於黾 2015-01-22
  • 打赏
  • 举报
回复
添加事件不要只会设计器里看属性,然后双击事件生成 你应该可以看到designer文件里自动生成的代码,照着写 循环行,给每个单元格用+=添加事件,然后测试一下好不好用呗 不好用再想别的办法 我也只是指出你一楼的办法存在的问题,可没有义务必须帮你弄出全套的代码来
敌敌畏耶 2015-01-22
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
我不清楚,自己试试呗,没这么玩过
那搞G8···
於黾 2015-01-22
  • 打赏
  • 举报
回复
我不清楚,自己试试呗,没这么玩过
敌敌畏耶 2015-01-22
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
你不是应该将这两个事件给单元格添加才对吗 单元格属于datagridview里封装的子控件,你把文件拽到它上面并不会引发主控件的事件
单元格有 DragEnter 和 DragDrop事件么?
於黾 2015-01-22
  • 打赏
  • 举报
回复
你不是应该将这两个事件给单元格添加才对吗 单元格属于datagridview里封装的子控件,你把文件拽到它上面并不会引发主控件的事件
本拉灯 2015-01-22
  • 打赏
  • 举报
回复

  private void dataGridView1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Link;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }

        private void dataGridView1_DragDrop(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                return;
            }
            var path = e.Data.GetData(DataFormats.FileDrop) as string[];
            if (path != null && path.Length > 0)
            {
                var f = path[0];
                if (!string.IsNullOrEmpty(f))
                {
                    MessageBox.Show(f);
                }
            }
        }

首先AllowDrop 属性为true ,没问题呀。。。
  • 打赏
  • 举报
回复
引用 10 楼 lwb314 的回复:
你好,首先AllowDrop 属性为true,然后要在DragEnter事件里这么写 private void Form1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Link; else e.Effect = DragDropEffects.None; } 这样就可以得到拖到文件的路径了,任意文件 private void Form1_DragDrop(object sender, DragEventArgs e) { string[] filePath = (string[])e.Data.GetData(DataFormats.FileDrop); foreach (string file in filePath ) { //file就是单个文件路径 } }
猿粪啊!
  • 打赏
  • 举报
回复
你好,首先AllowDrop 属性为true,然后要在DragEnter事件里这么写 private void Form1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Link; else e.Effect = DragDropEffects.None; } 这样就可以得到拖到文件的路径了,任意文件 private void Form1_DragDrop(object sender, DragEventArgs e) { string[] filePath = (string[])e.Data.GetData(DataFormats.FileDrop); foreach (string file in filePath ) { //file就是单个文件路径 } }
於黾 2015-01-22
  • 打赏
  • 举报
回复
要么你就别用 反正treeview是能拖进去
敌敌畏耶 2015-01-22
  • 打赏
  • 举报
回复
引用 7 楼 Z65443344 的回复:
我这不叫方法,什么叫方法? 如果单元格根本都没有这俩事件,那不是我瞎JB搞,而是你在瞎JB搞 没这俩事件文件根本就拖不进单元格里去
大爷,谁叫你把文件拖进单元格咯哦··· 看清楚我的问题好么?
於黾 2015-01-22
  • 打赏
  • 举报
回复
我这不叫方法,什么叫方法? 如果单元格根本都没有这俩事件,那不是我瞎JB搞,而是你在瞎JB搞 没这俩事件文件根本就拖不进单元格里去
敌敌畏耶 2015-01-22
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
添加事件不要只会设计器里看属性,然后双击事件生成 你应该可以看到designer文件里自动生成的代码,照着写 循环行,给每个单元格用+=添加事件,然后测试一下好不好用呗 不好用再想别的办法 我也只是指出你一楼的办法存在的问题,可没有义务必须帮你弄出全套的代码来
不会就不要瞎JB搞···说这么多,你打字累不?只可是全是废话···· 没人问你要代码,你这也叫方法?我也是服了····

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧