注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

SINOBANJO

IN GOD WE TRUST ! ~ ClueeZhuo

 
 
 
 
 

日志

 
 

BanjoLuee7月份学习总结  

2013-08-03 13:27:00|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
7月份工作总结如下:①上海民进自强进修学院定制开发 ②安康市政府定制功能升级5.0 ③清河县政府数据分析迁移 ④碎片整理修复 ,下面主要总结下项目开发中学到的知识点:BanjoLuee7月份学习总结 - 班卓 - BanjoElena—班卓埃琳娜国际
 
一、上海民进自强进修学院主要针对招生报名、学生信息管理进行定制(①信息列表可以自定义显示 ②信息列表每一列支持 双向排序 ③学生信息管理列表学生信息共用 ④招生报名与学生信息共用扩展字段)
①学生信息自定义显示:当用户选择自定义列表后弹出如图PC1:
BanjoLuee7月份学习总结 - 班卓 - BanjoElena—班卓埃琳娜国际

     这里通过Session记录字段选中状态:当窗口弹出时读取Session+默认选中字段来更新所需字段、当用户确定时更新Session

//事件触发后台更新Session

PEContext.Current.Context.Session["Build:SignUpFieldName"] = HdnSelectField.Value;

//事件触发后台调用前台JS方法执行GridView列表变换
ClientScript.RegisterStartupScript(ClientScript.GetType(), "ReturnValue:SelectField", "<script>ReturnValue(0);</script>");


②信息列表支持选项排序;需要设置GridView 属性AllowSorting="true" 以及OnSorting事件 (注意:数据源不支持 IEnumerable 数据的排序。只对 DataView、DataTable 和 DataSet 支持自动排序

 排序事件:

protected void EgvBuildFieldSignUpManager_Sorting(object sender, GridViewSortEventArgs e)
{
if (ViewState["SortDirection"] == null)
{
ViewState["SortDirection"] = "ASC";
}
else
{
ViewState["SortDirection"] = ViewState["SortDirection"].ToString().ToUpper().Contains("ASC") ? "DESC" : "ASC";
}
string direction = ViewState["SortDirection"].ToString();
HdnSortColumn.Value = e.SortExpression;//排序字段
HdnSortDir.Value = direction;//排序方向

EgvBuildFieldSignUpManager.DataBind();
}

获取数据:

public DataTable GetListByBuild(int startRowIndexId, int maxNumberRows, int searchType, string value, int status, string sortColumn, string sortDir, string regDate, string searchKey)
{
int startRowNum = startRowIndexId + 1;
int endRowNum = startRowIndexId + maxNumberRows;


string filter = " 1=1 ";
filter += GetFilter(searchType, value, status, regDate, searchKey);

string strSql = @"SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY " + sortColumn + " " + sortDir + @" ) AS Num ,
*
FROM dbo.PE_SS_SignUp
WHERE " + filter + @"
) AS TempTab
WHERE TempTab.Num BETWEEN " + startRowNum + " AND " + endRowNum;
return DBHelper.ExecuteDataSetSql(strSql).Tables[0];
}


获取数据条数:

public int GetCountNumber(int searchType, string value, int status, string regDate, string searchKey)
{
int num = 0;
string filter = " 1=1 ";
filter += GetFilter(searchType, value, status, regDate, searchKey);

string strSql = @"SELECT MAX(TempTab.Num)
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY SignUpID ASC ) AS Num ,
*
FROM dbo.PE_SS_SignUp
WHERE " + filter + @"
) AS TempTab ";
Object obj = DBHelper.ExecuteScalar(CommandType.Text, strSql, null);

if (!(obj is DBNull))
{
num = Convert.ToInt32(obj);
}
else
{
num = 0;
}
return num;
}


③学生信息共用:当用户想复制XXX学生到XXX班级时,点击复制按钮记录复制学生信息然后右键粘贴至XXX班级

EgvStudent_RowCommand事件:
PEContext.Current.Context.Session["Paste:Student"] = e.CommandArgument;//Session记录被复制学生ID
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "RELOADLEFTNU", "<script type='text/javascript'>parent.frames[\"left\"].location.reload();</script>");//刷新左侧树


左侧树注册右键JS:

/*添加粘贴学生排除本班级*/
if (PEContext.Current.Context.Session["Paste:Student"] != null)
{
int studentID = PEContext.Current.Context.Session["Paste:Student"].ToInt32();
string classid = BusinessLogic.Student.GetStudentById(studentID).ClassId.ToString();
jsBuilder.Append(" var studentid=" + studentID + "; \n");
jsBuilder.Append(" if( arrPurview !=" + classid + ") \n");
jsBuilder.Append(" {\n");
jsBuilder.Append("toolMenu.add(new WebFXMenuItem('粘贴学生','javascript:PasteStudent('+studentid+','+nodeId+','+arrModelId+','+arrPurview+')','粘贴学生'));\n");
jsBuilder.Append(" }\n");
}


Ajax处理粘贴信息:


<script language="javascript" type="text/javascript">
function PasteStudent(studentid, schoolid, gradeid, classid) {
var xml = "<?xml version='1.0' encoding='utf-8'?><root><type>pastestudent</type><StudentID>" + studentid + "</StudentID><SchoolID>" + schoolid + "</SchoolID><GradeID>" + gradeid + "</GradeID><ClassID>" + classid + "</ClassID></root>";
jQuery.post('<%=BasePath %>Ajax.aspx?HandlerName=StudentManageAjaxHandler', xml, function (s) {
switch (jQuery("result", s).text()) {
case "1":
alert("无复制信息!");
break;
case "2":
alert("粘贴出现异常!");
break;
case "0":
alert("粘贴成功!")
break;
default:
alert("粘贴发生未知的错误!");
break;
}
parent.frames["left"].location.reload();
});
}
</script>

如图PC2:
BanjoLuee7月份学习总结 - 班卓 - BanjoElena—班卓埃琳娜国际
 
在民进自强进修项目中还遇到了不少其他问题,这里就不一一列举。

二、再说下清河县数据分析迁移,这个还没有处理完。只是先分析了数据,由于客户只提供了XML数据,需要对这个XML分析。分析中遇到数据内容格式为Base64编码处理,并且附件以Email形式Base64编码。
这里就附件处理进行了一系列的查找资料,最后采用将附件保存XXX.eml文件然后对EML文件处理,其中Base64编码、解码

//编码:
byte[] bytes = Encoding.Default.GetBytes("要转换的字符串");
Convert.ToBase64String(bytes);
//解码:
//"ztKwrsTj"是“我爱你”的base64编码
byte[] outputb = Convert.FromBase64String("ztKwrsTj");
string orgStr = Encoding.Default.GetString(outputb);

对邮件的读写操作使用到Interop.ADODB、Interop.CDO 这两个动态链接库

邮件发送:

private void SendEmails()
{
try
{
CDO.Message objMsg = new CDO.Message();
objMsg.From = "13153181639@163.com";
objMsg.To = "banjoluee@163.com";
objMsg.Subject = "mail Subject test";
objMsg.HTMLBody = "mail body test";
objMsg.Keywords = "qwe123!@#";
objMsg.Send();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

邮件读取:

private void ReadEML(string emailPath)
{
string file = emailPath;
CDO.Message oMsg = new CDO.Message();
ADODB.Stream stm = null;
//读取EML文件到CDO.MESSAGE,做分析的话,实际是用了下面的部分
try
{
stm = new ADODB.Stream();
stm.Open(System.Reflection.Missing.Value,
ADODB.ConnectModeEnum.adModeUnknown,
ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified,
"", "");
stm.Type = ADODB.StreamTypeEnum.adTypeBinary;//二进制方式读入

stm.LoadFromFile(file); //将EML读入数据流

oMsg.DataSource.OpenObject(stm, "_stream"); //将EML数据流载入到CDO.Message,要做解析的话,后面就可以了。

//邮件的内容
this.txtEmailContext.Text=oMsg.TextBody;
//发件人
this.lblFrom.Text = oMsg.From;
//收件人
this.lblTo.Text = oMsg.To;
//标题
this.lblTitle.Text = oMsg.Subject;
//时间
this.lblTime.Text = oMsg.ReceivedTime.ToString();
//附件个数
this.lblCount.Text = oMsg.Attachments.Count.ToString();


CDO.IBodyParts ip = oMsg.Attachments;
int count = oMsg.Attachments.Count;
for (int i = 1; i <= count; i++)
{
////获取到附件的文件名称+后缀
object FileName = oMsg.Attachments[i].FileName;
//object fileContext=oMsg.Attachments[i].GetStream();
//内容
oMsg.Attachments[i].SaveToFile(@"C:\" + FileName);
//ip.GetEnumerator().Current;
}

}
catch (IOException ex)
{
}
finally
{
stm.Close();
}
}

邮件附件下载:

private void DownloadEmail(string emailPath)
{
if (emailPath != null && emailPath != "")
{
string file = emailPath;
CDO.Message oMsg = new CDO.Message();
ADODB.Stream stm = null;
//读取EML文件到CDO.MESSAGE,做分析的话,实际是用了下面的部分

try
{
stm = new ADODB.Stream();
stm.Open(System.Reflection.Missing.Value,
ADODB.ConnectModeEnum.adModeUnknown,
ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified,
"", "");
stm.Type = ADODB.StreamTypeEnum.adTypeBinary;//二进制方式读入

stm.LoadFromFile(file); //将EML读入数据流

oMsg.DataSource.OpenObject(stm, "_stream"); //将EML数据流载入到CDO.Message,要做解析的话,后面就可以了。
CDO.IBodyParts ip = oMsg.Attachments;
int count = oMsg.Attachments.Count;
if (count != 0)
{
for (int i = 1; i <= count; i++)
{
////获取到附件的文件名称+后缀
object FileName = oMsg.Attachments[i].FileName;
//object fileContext=oMsg.Attachments[i].GetStream();
//内容
oMsg.Attachments[i].SaveToFile(@"C:\" + FileName);
//ip.GetEnumerator().Current;
}
MessageBox.Show("下载完成,保存到:C:\\根目录");
}
else
{
MessageBox.Show("没有附件");
}
}
catch (IOException ex)
{

}
finally
{
stm.Close();
}
}
else
{
MessageBox.Show("还没有选择邮件");
}
}


PS:本月总结到此结束,THX.
  评论这张
 
阅读(323)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017