日期:2014-05-18  浏览次数:20732 次

菜鸟求助了,有个问题我不知道怎么解决
要做一个上传功能

有添加,上传,删除
文件上传到指定的地方,然后数据库里有个表会有响应的记录,没上传一个文件,都会有详细的记录,删除文件也会从数据库里吧对应的记录删除,

打开winform首先就把原来数据库里的记录显示出啦,我暂时用dateGridView,后面想换其他空间
添加,我用openfileDialog选中文件,
上传只能上传新添加的,dateGrid中显示的原来已经保存在数据库中的信息当然是不用上传了
删除是删除选中的,也是只能删除添加的,原来的记录不能删除

整个过程就是添加文件,如果有不想上传的就删除刚才添加的,最后确认了就点击上传。

我不知道该怎么完成

我现在是先从数据库里差了原来的表,把值放在dataTable中,然后给datatable添加一列,叫directoryName,用来保存上传文件的路径,从数据库里取出来的数据不需要上传,所以给dt添加这个列之后就空着,不给他添加数据。
然后把dateGrid.datasource=dataTable;
然后循环dataTable所有列,把不需要显示的列都隐藏掉,并且做一些去掉添加功能,不能编辑之类的(有2个文本框,用户编辑要在文本框里头编辑,编辑文件名字和详细描述这两个字段)

点击 添加 就openfileDialog让用户选择,然后把文件名字,后缀,路径都保存到dt中,其中详细描述和名字还要保存到txt中,让用户编辑。

点击删除,就把dateGrid中选中的文件,并且判断dt中列directoryName不为空的行删除,因为directoryName为空的都是原来服务器里头就有的文件。

点击上传就遍历dt的行,把directoryName有数据的行保存到服务器中。

但是:
我觉得通过dt中添加一个列directoryName这样来判断是否是新添加的很笨,我是培训班出来的,基础也比较差,求哥哥姐姐给个好点的方法。

而且用dt每次需要干什么都需要遍历里头所有的行,判断directoryName是否为空,有没有办法让dt可以向数据库那样,直接select count(*) from dt where directoryName is not null。

虽然我暂时是这么完成的,但是我这样总觉得会有问题。而且如果以后再又别的操作,我觉得这个程序已经写不下去了,比如判断文件名是不是重复,我就要一个一个遍历过去,是不是有重复。有什么好办法可以让我判断这个文件是不是我新添加的。我感觉可不可以在dt和datagrid中间增加一个缓解,或者用2个表之类的,一个表就是用来保存从数据库里取出的数据,另一个表,或者有一个环节有一层数据,是用来保存新添加的数据的。不管我怎么操作都是对新添加的数据操作,只是gridview显示的时候是现实2个表的内容。

或者有其他办法么?我已经工作快半年了,以前发帖总喜欢说新人求助,我觉得现在要说菜鸟求助了,谢谢哥哥姐姐了。

我发觉和别人差距好大,和我一起进来的一个人,不懂的东西,拿到手到处搜搜,不停的调试,很快就搞懂了,我就根本不行了。

------解决方案--------------------
可以使用 webclient 类,它封装了上传文件的方法 uploadfile()
------解决方案--------------------
太长了,大概看了下,你是要上传的时候要有一个界面,选择好以后一次性上传,并且判断下是否已经存在该文件。大概思路是用建一个类,里面的属性对应存你需要保存到数据库里信息。然后用list<类>来保存用户选择上传的每个文件的信息,在另外做一个datagridview,把datasource = list<类>,这样你就能用另一个表来显示上传文件的信息了,并且上传的时候直接把list里面对应的信息插到对应列就好了。至于判断文件重复,你把数据库里面文件名这一列设置成唯一约束,然后在上传的时候用try catch来把重复的过滤掉,并做提示。如果你想在用户选择上传文件的时候就提醒,那就只能遍历了。