您的位置:首页 > 其它

文档库文件的附件的webpart (原创)

2009-09-08 16:55 169 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using System.IO;
using System.Web.UI.WebControls.WebParts;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Utilities;

namespace UploadDocument
{
public class AddAttachments : WebPart
{
private Button SubmitButton = new Button();
private Button btnMoreFile = new Button();
SPListItem item;
Dictionary<string, string> GenFieldKeyID=new Dictionary<string,string>();
List<string> FieldValidator = new List<string>();

int Count
{
get
{
if (ViewState["ControlCount"] == null)
ViewState["ControlCount"] = uploadNum;
return (int)ViewState["ControlCount"];
}
set
{
ViewState["ControlCount"] = value;
}
}

ControlCollection CellControls
{
get
{
if (ViewState["controls"] == null)
ViewState["controls"] = this.Controls;
return (ControlCollection)ViewState["controls"];
}
set
{
ViewState["controls"] = value;
}
}

private bool FieldContains(string[] arr, string str)
{
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == str)
return true;
}
return false;
}

private void AddControl()
{
using (SPWeb web = SPContext.Current.Site.OpenWeb())
{
try
{
GenFieldKeyID.Clear();
if (Page.Request.QueryString["ListName"] == null) return;
SPList list = web.Lists[Page.Request.QueryString["ListName"]];

//UniqueId
//item = list.GetItemByUniqueId(new Guid(Page.Request.QueryString["docID"]));

//ID
item = list.GetItemById(Convert.ToInt32(Page.Request.QueryString["docID"]));

Table table = new Table();
table.CssClass = "upload_edit_tb";
table.CellPadding = 0;
table.CellSpacing = 0;
TableRow row;
TableCell cell;
Literal ltTitle=new Literal();
ltTitle.Text = "<SPAN class=cur_met_txt>当前位置:公文详细信息</SPAN>";

row = new TableRow();
cell = new TableCell();
cell.CssClass = "cur_met_room";
cell.ColumnSpan = 3;
cell.Controls.Add(ltTitle);
row.Controls.Add(cell);
table.Rows.Add(row);

row = new TableRow();
cell = new TableCell();
cell.ColumnSpan = 3;
cell.Height = 10;

row.Controls.Add(cell);
table.Rows.Add(row);

//取自视图
//for (int i = 0; i < list.DefaultView.ViewFields.Count; i++)
//取自全部字段
//for (int i = 0; i < list.Fields.Count; i++)
//取自全部内容类型
//for (int i = 0; i < list.ContentTypes.Count; i++)
//取自第一个文档类型
SPContentType cty = list.ContentTypes[0];
for (int i = 0; i < cty.Fields.Count; i++)
{
//取自视图
//SPField field = list.Fields.GetField(list.DefaultView.ViewFields[i]);
//取自全部字段
//SPField field = list.Fields[i];

//取自第一个文档类型
SPField field = cty.Fields[i];
if (!field.Hidden && !field.FromBaseType && !(field.Type == SPFieldType.WorkflowStatus))
{

row = new TableRow();
cell = new TableCell();
cell.Text = field.Title;
//cell.Width = 100;
cell.CssClass = "upload_edit_left";

row.Cells.Add(cell);

cell = new TableCell();
Control cntrl = SharePointWebControls.GetSharePointControls(field, list, item, SPControlMode.Display);
if (cntrl == null) continue;

//判断是否在配置栏中
//if (FieldContains(genFields.Split(','), field.Title))
{
Control control = SharePointWebControls.GetSharePointControls(field, list, item, SPControlMode.Edit);

control.ID = "tbx" + i.ToString();

GenFieldKeyID.Add(field.Title, control.ID);
//row.Cells.Add(cell);
cell = new TableCell();
cell.CssClass = "upload_edit_right";

cell.Controls.Add(control);
row.Controls.Add(cell);

if (field.Required == true)
{
cell = new TableCell();
Label lbl = new Label();
lbl.ID = "Vali" + control.ID;
lbl.Text = "(*必填)";
lbl.ForeColor = System.Drawing.Color.Red;
cell.CssClass = "upload_pop";
cell.Controls.Add(lbl);
row.Controls.Add(cell);
FieldValidator.Add(control.ID);
}
else
{
cell = new TableCell();
cell.CssClass = "upload_pop";
row.Controls.Add(cell);
}
table.Rows.Add(row);

}
}

}
this.Controls.Add(table);

InitFileControl(uploadNum);

Table table1 = new Table();
table.CssClass = "upload_edit_tb";
table.CellPadding = 0;
table.CellSpacing = 0;

row = new TableRow();
cell = new TableCell();
//cell.Width = 100;
cell.CssClass = "upload_edit_left";

row.Cells.Add(cell);

cell = new TableCell();
SubmitButton.ID = "SubmitButton";
SubmitButton.Text = "确 定";
SubmitButton.CssClass = "upload_edit_bt";
SubmitButton.Click += new EventHandler(SubmitButton_Click);
cell.CssClass = "upload_edit_post";

cell.Controls.Add(this.SubmitButton);
row.Controls.Add(cell);
table1.Rows.Add(row);
this.Controls.Add(table1);
}
catch (Exception ex)
{
throw ex;
}

}

}

void btnMoreFile_Click(object sender, EventArgs e)
{
if (this.Page.IsPostBack == false)
{
//Count++;
//NewFileControl(Count);
uploadNum=Convert.ToInt32(((TextBox)this.FindControl("tbnum")).Text);
this.AddControl();
}
}

private void NewFileControl(int Count)
{
Literal lb = new Literal();
lb.Text = " 上传文件" + Count.ToString();
FileUpload fileup = new FileUpload();
fileup.ID = "fileUpload" + Count.ToString();
this.Controls.Add(lb);
this.Controls.Add(fileup);

}

private void InitFileControl(int count)
{
Table table = new Table();
table.CssClass = "upload_edit_tb";
table.CellPadding = 0;
table.CellSpacing = 0;

TableRow row;
TableCell cell;

for (int i = 0; i < count; i++)
{
row = new TableRow();
cell = new TableCell();

Literal lb = new Literal();
lb.Text =" 上传文件"+ (i+1).ToString();

cell.Controls.Add(lb);
//cell.Width = 100;
cell.CssClass = "upload_edit_left";

row.Controls.Add(cell);

cell = new TableCell();

FileUpload fileup = new FileUpload();
fileup.CssClass = "upload_view";
fileup.ID = "fileUpload" + i.ToString();
cell.CssClass = "upload_edit_right";

cell.Controls.Add(fileup);
row.Controls.Add(cell);

cell = new TableCell();
cell.CssClass = "upload_pop";
row.Controls.Add(cell);

table.Rows.Add(row);

}

#region 动态加上传控件,暂时屏蔽

//row = new TableRow();
//cell = new TableCell();

//Literal lbnum = new Literal();
//lbnum.Text = " 上传文件数:";
//cell.Width = 100;
//cell.CssClass = "upload_edit_left";

//cell.Controls.Add(lbnum);
//row.Controls.Add(cell);

//cell = new TableCell();
//TextBox tbnum = new TextBox();
//tbnum.ID = "tbnum";

//this.btnMoreFile.ID = "btnMoreFile";
//this.btnMoreFile.Text = "重新设置";
//this.btnMoreFile.Click += new EventHandler(btnMoreFile_Click);
//this.Controls.Add(this.btnMoreFile);

//cell.Controls.Add(tbnum);
//cell.Controls.Add(btnMoreFile);
//row.Controls.Add(cell);
//table.Rows.Add(row);

#endregion

this.Controls.Add(table);

}

void SubmitButton_Click(object sender, EventArgs e)
{
//验证
if (!ValidateLibrary()) return;

string strRoot = "";

if (this.Page.Request.QueryString["RootFolder"] != null)
{
strRoot = this.Page.Request.QueryString["RootFolder"];
}

string fileID = this.Page.Request.QueryString["docID"];
string fileName = this.Page.Request.QueryString["fileName"];

Dictionary<string,byte[]> files=new Dictionary<string,byte[]>();

for (int i = 0; i < uploadNum; i++)
{
FileUpload fi=((FileUpload)this.FindControl("fileUpload"+i.ToString()));
if (fi.HasFile)
{
if (!files.Keys.Contains(fi.FileName))
{
files.Add(fi.FileName, fi.FileBytes);
}
}
}

//添加附件
AddDocAttachments(strRoot, fileID, fileName, files);

if (dirType == defaultDirType.直接地址)
{
this.Page.Response.Redirect(dirPageURL);
}
else if (dirType == defaultDirType.工作流)
{
this.Page.Response.Redirect(this.Page.Request.QueryString["wf_url"]);
}

}

private bool ValidateLibrary()
{

for (int i = 0; i < FieldValidator.Count; i++)
{
if (((BaseFieldControl)this.FindControl(FieldValidator[i])).Value.ToString() == "")
{
return false;
}
else
{
((Label)this.FindControl("Vali" + FieldValidator[i])).Text = "";
}
}
return true;

}

private string SaveDocumentLibraryItem()
{
try
{
foreach (string key in GenFieldKeyID.Keys)
{
item[key] =((BaseFieldControl)this.FindControl(GenFieldKeyID[key])).Value; //((TextBox)this.FindControl(GenFieldKeyID[key])).Text;//
}
item.Update();
return "保存成功!";

}
catch (Exception ex)
{
return ex.Message;
}
}

private string AddDocAttachments(string RootFolder,string fileid,string filename, Dictionary<string, byte[]> files)
{
try
{
SPSite site = new SPSite(siteUrl);
SPWeb web = null;

if (webUrl != "")
{
web = site.OpenWeb(webUrl.Trim());
}
else
{
web = site.OpenWeb();
}

site.AllowUnsafeUpdates = true;

SPList list = web.Lists[listUrl];
SPFolder rootFolder = web.GetFolder(filename);

if (!rootFolder.Exists)
{
//区分对待文档库
if (list.BaseType == SPBaseType.DocumentLibrary)
{
//如果是文档库则建目录
SPFolder folder = list.RootFolder.SubFolders.Add(filename);

SPListItem item = folder.Item;
item["Title"] = filename;
item["ContentTypeId"] = "Folder";
web.AllowUnsafeUpdates = true;
item.Update();
web.AllowUnsafeUpdates = false;
rootFolder = folder;

//创建文件
foreach (string key in files.Keys)
{
byte[] binFile = files[key];

SPFile spFile = web.GetFile(rootFolder.Url + "/" + key);
if (spFile.Exists)
{
spFile.Delete();
}
//写入文件
web.AllowUnsafeUpdates = true;

//提交
Hashtable ht = new Hashtable();
ht.Add("DocID", fileid);

rootFolder.Files.Add(rootFolder.Url + "/" + key, binFile, ht, true);
}

}
//不是文档库时建立的是文件
else
{
//如果是列表则建文件
SPListItem tmpItem = list.Folders.Add(list.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.File);
tmpItem["Title"] = filename;
web.AllowUnsafeUpdates = true;

foreach (string key in files.Keys)
{
byte[] binFile = files[key];

tmpItem.Attachments.Add(key, binFile);
tmpItem["DocID"] = fileid;
}

tmpItem.Update();
SaveDocumentLibraryItem();
//权限
//SharePointRole.addRole(site, web, tmpItem, "读取");
web.AllowUnsafeUpdates = false;
}

}

web.AllowUnsafeUpdates = false;
return "";
}
catch (Exception ex)
{
return ex.Message;
}
}

private void addFolder(string checkPath, string createPath, string folderName, SPWeb web, SPList list)
{
SPFolder rFolder = web.GetFolder(checkPath);
//判断是否存在文件夹,没有则新建
if (!rFolder.Exists)
{
SPListItem newFolder = list.Items.Add(createPath, SPFileSystemObjectType.Folder, folderName);
web.AllowUnsafeUpdates = true;
newFolder.Update();
web.AllowUnsafeUpdates = false;
rFolder = newFolder.Folder;
}
}

private SPList GetSPList(string strSite, string strWeb, string strList)
{
try
{
using (SPSite site = new SPSite(strSite))
{
site.AllowUnsafeUpdates = true;
using (SPWeb web = site.OpenWeb(strWeb))
{
web.AllowUnsafeUpdates = true;

SPListCollection lists = web.Lists;
SPList list = lists[strList];
return list;
}
}
}
catch (Exception ex)
{
throw ex;
}
}

//获取和设置站点的地址
private const string defaultSiteUrl = "";
private string siteUrl = defaultSiteUrl;

[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("请输入站点的地址(必填),如http://eiptest/")]
[WebDescription("这里可以更换连接到文档库的地址")]
public string SiteUrl
{
get
{
return this.siteUrl;
}
set
{
siteUrl = value;
}
}

private const string defaultWebUrl = "";
private string webUrl = defaultWebUrl;

[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("请输入网站的地址(可不填),空白则为默认网站")]
[WebDescription("这里可以更换连接到文档库网站的地址")]
public string WebUrl
{
get
{
return this.webUrl;
}
set
{
webUrl = value;
}
}

//设定起始节点
private const string defaultList = "/Attachments";
private string listUrl = defaultList;

[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("列表名称(必填)")]
[WebDescription("请输入列表的名称")]
public string ListUrl
{
get
{
return listUrl;
}
set
{

listUrl = value;
}
}

//跳转方式
public enum defaultDirType { 直接地址, 工作流 };
private defaultDirType dirType = defaultDirType.工作流;

[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("跳转方式")]
[WebDescription("请输入跳转方式")]
public defaultDirType DirType
{
get
{
return dirType;
}
set
{

dirType = value;
}
}

//设定跳转页面
private const string defaultDirPageURL = "";
private string dirPageURL = defaultDirPageURL;

[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("跳转页面,如http://eip/Pages/XX.aspx")]
[WebDescription("请输入跳转页面")]
public string DirPageURL
{
get
{
return dirPageURL;
}
set
{

dirPageURL = value;
}
}

//private const string defaultFields = "标题";
//private string genFields = defaultFields;

//[Personalizable]
//[WebBrowsable, Category("配置")]
//[WebDisplayName("可编辑的栏名(必填)")]
//[WebDescription("可编辑的栏名")]
//public string GenFields
//{
// get
// {
// return genFields;
// }
// set
// {

// genFields = value;
// }
//}

private const int defaultUploadNum = 6;
private int uploadNum = defaultUploadNum;

[Personalizable]
[WebBrowsable, Category("配置")]
[WebDisplayName("可上传的文件数(必填)")]
[WebDescription("可上传的文件数")]
public int UploadNum
{
get
{
return uploadNum;
}
set
{

uploadNum = value;
}
}

protected override void OnLoad(EventArgs e)
{

base.OnLoad(e);
if (this.Page.IsPostBack == true)
this.AddControl();

}

protected override void CreateChildControls()
{
if (this.Page.IsPostBack == false)
{
this.AddControl();

}
}

protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
//using (SPWeb web = SPContext.Current.Site.OpenWeb())
//{
// try
// {
// GenFieldKeyID.Clear();
// if (Page.Request.QueryString["ListName"] == null) return;
// SPList list = web.Lists[Page.Request.QueryString["ListName"]];

// //UniqueId
// //item = list.GetItemByUniqueId(new Guid(Page.Request.QueryString["docID"]));

// //ID
// item = list.GetItemById(Convert.ToInt32(Page.Request.QueryString["docID"]));

// writer.Write("<div class=\"upload_edit_main\"><div class=\"met_room_title\"><div class=\"cur_met_room\"><span class=\"cur_met_txt\">当前位置:添加附件</span></div></div>");

// writer.Write("<div class=\"upload_edit_list\">");

// //取自视图
// //for (int i = 0; i < list.DefaultView.ViewFields.Count; i++)
// //取自全部字段
// //for (int i = 0; i < list.Fields.Count; i++)
// //取自全部内容类型
// //for (int i = 0; i < list.ContentTypes.Count; i++)
// //取自第一个文档类型
// SPContentType cty = list.ContentTypes[0];
// for (int i = 0; i < cty.Fields.Count; i++)
// {
// //取自视图
// //SPField field = list.Fields.GetField(list.DefaultView.ViewFields[i]);
// //取自全部字段
// //SPField field = list.Fields[i];

// //取自第一个文档类型
// SPField field = cty.Fields[i];
// if (!field.Hidden && !field.FromBaseType && !(field.Type == SPFieldType.WorkflowStatus))
// {

// writer.Write("<div class=\"upload_edit_txt\">");
// writer.Write("<div class=\"upload_edit_left\">");
// writer.Write(field.Title);
// writer.Write("</div>");
// Control cntrl = SharePointWebControls.GetSharePointControls(field, list, item, SPControlMode.Display);
// if (cntrl == null) continue;

// //判断是否在配置栏中
// //if (FieldContains(genFields.Split(','), field.Title))
// {
// Control control = SharePointWebControls.GetSharePointControls(field, list, item, SPControlMode.Edit);

// control.ID = "tbx" + i.ToString();

// GenFieldKeyID.Add(field.Title, control.ID);

// writer.Write("<div class=\"upload_edit_right\" >");
// control.RenderControl(writer);
// writer.Write("</div>");

// if (field.Required == true)
// {

// Label lbl = new Label();
// lbl.ID = "Vali" + control.ID;
// lbl.Text = "(*必填)";
// writer.Write("<div class=\"upload_pop\" >");
// lbl.RenderControl(writer);
// writer.Write("</div>");

// FieldValidator.Add(control.ID);
// }
// else
// {
// writer.Write("<div class=\"upload_pop\"> </div>");
// }

// }
// writer.Write("</div>");
// }
// }

// //InitFileControl(uploadNum);

// for (int i = 0; i < uploadNum; i++)
// {
// writer.Write("<div class=\"upload_edit_txt\" >");

// Literal lb = new Literal();
// lb.Text = " 上传文件" + (i + 1).ToString();

// writer.Write("<div class=\"upload_edit_left\">");
// lb.RenderControl(writer);
// writer.Write("</div>");

// FileUpload fileup = new FileUpload();
// fileup.CssClass = "upload_view";
// fileup.ID = "fileUpload" + i.ToString();

// writer.Write("<div class=\"upload_edit_right\" >");
// fileup.RenderControl(writer);
// writer.Write("</div>");

// writer.Write("<div class=\"upload_pop\"> </div>");
// writer.Write("</div>");

// }

// SubmitButton.ID = "SubmitButton";
// SubmitButton.Text = "确 定";
// SubmitButton.CssClass = "upload_edit_bt";
// SubmitButton.Click += new EventHandler(SubmitButton_Click);

// writer.Write("<div class=\"upload_edit_post\">");

// SubmitButton.RenderControl(writer);
// writer.Write("</div>");

// writer.Write("</div>");
// writer.Write("</div>");

// }
// catch (Exception ex)
// {
// throw ex;
// }

//}
}

protected override void OnPreRender(EventArgs e)
{
CssRegistration cssControls = new CssRegistration();
cssControls.Name = "/wpresources/style/upload/css/font.css";

CssRegistration cssControls2 = new CssRegistration();
cssControls2.Name = "/wpresources/style/upload/css/upload_edit.css";

Page.Header.Controls.Add(cssControls);
Page.Header.Controls.Add(cssControls2);

}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐