• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

SilverLight C#程序之:把文件转为二进制流保存到数据库(任意文件类型) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在C#程序里面我们经常会遇到文件上传的问题。

目前正在做一个SilverLight项目,也需要上传文件这样一个功能。。。

杯具的是SilverLight没有提供给我们够牛的上传控件,为此我们不得不,花费大量的精力自定义一个上传控件。。。

废话不多说看效果:

点击确定后

通过图片我们可以看到,上传控件可以上传任意一个文件。。。(忘记限制上传大小了=.=)

SilverLight代码

View Code
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
</Grid.RowDefinitions>
<sdk:DataGrid x:Name="gridConAttachmentModel" Grid.Row="0" RowHeight="25"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#FEFEFE"
HeadersVisibility="Column" BorderThickness="0,1,0,0" GridLinesVisibility="All"
AutoGenerateColumns="False" FrozenColumnCount="1" AreRowDetailsFrozen="True"
ItemsSource="{Binding ConAttachmentModelList}" SelectedItem="{Binding ConAttachmentModel}"
IsReadOnly="True">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="序号" Binding="{Binding ConAtt_OrderNum,Mode=TwoWay}" IsReadOnly="True" />
<sdk:DataGridTextColumn Header="附件名称" Binding="{Binding ConAtt_Name,Mode=TwoWay}" />
<sdk:DataGridTextColumn Header="附件资料" Binding="{Binding ConAtt_Name,Mode=TwoWay}">
</sdk:DataGridTextColumn>
<sdk:DataGridTextColumn Header="操作员编号" Binding="{Binding ConAtt_MakerId,Mode=TwoWay}" IsReadOnly="True" Visibility="Collapsed"></sdk:DataGridTextColumn>
<sdk:DataGridTextColumn Header="操作员名称" Binding="{Binding ConAtt_MakerName,Mode=TwoWay}" IsReadOnly="True" />
<sdk:DataGridTextColumn Header="备注" Binding="{Binding ConAtt_Remark,Mode=TwoWay}" />
<sdk:DataGridTemplateColumn Header="预览" Width="90" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<HyperlinkButton Content="查看" Margin="5" Click="HyperlinkButton_Click"></HyperlinkButton>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
<Button Height="20" Width="80" Margin="5" Content="添加文件" Grid.Row="1" HorizontalAlignment="Left" Command="{Binding UploadCommd}">
</Button>
</Grid>

CS代码

View Code
UploadCommd = new DelegateCommand(DoUploadCommd);
//定义上传命令

//上传方法void DoUploadCommd()
{
var check
= Container.Resolve<IContractUploadViewModel>();
//注册弹出窗页面
check.IContractListViewModel = this;
//弹出窗内的文件列表
check.View.Show();//显示弹出窗
}

子窗体Xaml代码

View Code
<Grid x:Name="LayoutRoot" Margin="2">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid x:Name="grid">
<Grid.RowDefinitions>
<RowDefinition Height="45"/>
<RowDefinition Height="60"/>

</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Height="25" FontSize="14"
          Grid.Column="1">请选择要上传的文件(可多选):</TextBlock>
<c1:C1FilePicker Name="file" Grid.Column="1" Grid.Row="1"
Height
="30" Margin="5"
                   Filter="All|*.*|Images|*.jpg;*.png;*.gif|Word|*.doc;*.docx|Excel|*.xls;*.xlsx"
FilterIndex
="2" Multiselect="True"/>

</Grid>
<Button x:Name="CancelButton" Content="取消" Command="{Binding CancelCommand}" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" />
<Button x:Name="OKButton" Content="确定" Command="{Binding SaveCommand}" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="1" />
</Grid>

子窗体CS代码

View Code
//两个命令 确定和退出
SaveCommand = new DelegateCommand(DoSave);
CancelCommand
= new DelegateCommand(() => View.Close());

/// <summary>
/// 保存数据
/// </summary>
void DoSave()
{
//获取上传控件里面的文件
var fileInfos = View.Conterl.file.SelectedFiles;
if (fileInfos == null)
{
MessageBox.Show(
"没有要上传的文件");
return;
}
//获取主界面 列表里面的行数
//用于修改 假如主界面有三个 现在上传的就给原基础上添加
//没有做防重复 事件
var i= IContractListViewModel.ConAttachmentModelList.Count;
ConAttachmentModelList
= new List<ConAttachmentModel>();
//遍历上传控件里面的所有文件
//本控件可以上传多个文件
foreach (var fileInfo in fileInfos)
{
//序号++
i++;
//读取文件
var fs = fileInfo.OpenRead();
//实例二进制转换器
var br = new BinaryReader(fs);
//写入二进制流
var filebyte = br.ReadBytes((int) fs.Length);
//实现一个保存到数据库的实体
ConAttachmentModel = new ConAttachmentModel
{
ConAtt_Files
= filebyte,
ConAtt_MakerName
= "管理员",
ConAtt_Name
= fileInfo.Name,
ConAtt_OrderNum
= i,
ConAtt_Remark
= "文件名: "+fileInfo.Name + "上传时间: " + DateTime.Now
};
ConAttachmentModelList.Add(ConAttachmentModel);
}
//关闭窗口
CancelCommand.Execute(null);
//遍历当前列表
//添加到主窗体
foreach (var conAttachmentModel in ConAttachmentModelList)
{
IContractListViewModel.ConAttachmentModelList.Add(conAttachmentModel);
} }

主窗体保存数据库

foreach (var conAttachmentModel in ContractModel.ConAttachmentModelList)
{
conAttachmentModel.ConAtt_Id
= Guid.NewGuid();
conAttachmentModel.Save();
}

大功告成!!!

http://www.cnblogs.com/lukun/  联系我,非常感谢。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# 通配符转正则发布时间:2022-07-10
下一篇:
C#interviewquestions---国外大公司c#技术面试必看发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap