照学校的教学安排,上学期老师讲了一个学期的C#语言,一学期下来基本上没怎么听过,听了一些应该也都忘干净了。
这学期开学的前一个月就是完成上学期留下来任务做个小屁项目。要做的项目是做个校园门户网站,一开始彻底没底。除了做了几个静态页面其余的都无从下手。因为要通过答辩,慢慢就从书和网上找资料,项目这才算是开始了也慢慢找到了些.net写项目的感觉。
项目完成功能:
添加更行学院简介信息、教务信息、院系介绍信息,用户管理,个人管理(密码修改),发布新闻,管理新闻(查看、修改、删除),投票信息管理(设置投票头信息),留言信息管理。
编码工作:
完成一组增、删、改、查,之后的模块基本上就是一个模式了。到完成整个项目找不到几丝的成就感,因为业务逻辑等等什么的都没有什么技术含量。到然整个项目也没什么有特色的地方。唯一的感觉web开发.net要比Java好用、简单。在编码过程中一下几个地方那个是稍微费神的地方因为不熟悉。
(一)DateGrid模板列的使用,一开始还不知道DateGrid也能用模板列。一直在想着DateList模板列该怎么用。
比如在主页面显示新闻:
[<%# DataBinder.Eval(Container.DataItem, "newsTypeName")%>]
<%# DataBinder.Eval(Container.DataItem, "title")%>
(<%#DataBinder.Eval(Container.DataItem, "newDate")%>
)
黑色加粗的代码就是通过超链接把iID带到相应页面,然后再在页面获取其ID进行数据库查询显示。后面红色代码就是要连接的ID值,后面再加上一字段,在页面显示时就会显示后面的字段值。
(二)在这次项目中第一次使用了FCKEdior;
1,先在其官网下载FCKeditor_2.6.3.zip,FCK在.net和java中的使用各不相同。在.net中使用还必需下载支持.net的FCKeditor.Net.zip包。
2,把FCKeditor_2.6.3.zip解压后得到的fckeditor文件夹复制到你想使用这个编辑器的网站的根目录下面,然后再解压FCKeditor.Net.zip包找到其目录下的/bin/Debug目录中的FredCK.FCKeditorV2.dll文件。在你的网站里面把这个FredCK.FCKeditorV2.dll添加到bin目录下,直接添加引用就OK。
3,在要用FCK页面顶部加上<%@ Register TagPrefix='FCKeditorV2' Namespace='FredCK.FCKeditorV2' Assembly='FredCK.FCKeditorV2'%> 然后再相应位置加上这句代码
4,在web.config配置文件中加入
注意:value值不能写错“~”代表你项目的跟目录。
5,获取FCKEditor的值,直接fck id的值.value 就OK,如上面第三条的第二句代码FCKeditor1.value就能获取FCKEditor的值。
(三)关于FCKEditor的一些设置。
1,打开fckeditor文件下的fckconfig.js文件 找到
var _FileBrowserLanguage = 'aspx' ; // asp | aspx | cfm | lasso | perl | php | py
var _QuickUploadLanguage = 'aspx' ; // asp | aspx | cfm | lasso | perl | php | py
把默认的值改为aspx
FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/office2003/' ; 皮肤设置。
FCKConfig.DefaultLanguage = 'zh-cn' ; 默认语言设置
FCKConfig.FontNames = '宋体;黑体;隶书;楷体_GB2312;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ; 设置字体 可以再这里加入你需要的字体名称。
2,默认工具栏设置(根据需要可以进行修改)
FCKConfig.ToolbarSets["Default"] = [
['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],
['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],
['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],
'/',
['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote','CreateDiv'],
['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
['Link','Unlink','Anchor'],
['Image',/*'Flash',*/'Table','Rule','Smiley','SpecialChar','PageBreak'],
'/',
['Style','FontFormat','FontName','FontSize'],
['TextColor','BGColor'],
/* ['FitWindow','ShowBlocks','-','About'] */ // No comma for the last row.
] ;
(四)其余方面
1, like关键字的使用如搜索新闻
string sql=string.Format("select newsID,title,newsTypeName,author,newDate from newstable where title like '% {0}%'or newsContent like '%{1}%'or newDate like '%{2}%'",keyword,keyword,keyword);
2,登录代码:
系统分为系统管理员和新闻管理员
private void btnLogin_Click(object sender, System.EventArgs e)
{
string username = this.txtUserName.Text.Trim();
string password = this.txtPassword.Text.Trim();
string userclass = this.dList1.SelectedItem.Value;
Session["username"]=username;
Session["userclass"]=userclass;
Session["password"]=password;
try
{
con = schoolDB.connection;
con.Open();
string sql ="select userName,password,userclass from users where username='"+username+"'and password='"+password+"'and userclass='"+userclass+"'";
cmd = new SqlCommand(sql,con);
sd = cmd.ExecuteReader();
if(sd.Read())
{
if(sd.GetValue(0).ToString()==username && sd.GetValue(1).ToString()==password)
{
if("系统管理"==sd.GetValue(2).ToString())
{
Response.Redirect("menuManager/admin_main.aspx");
}
else
{
Response.Redirect("newsManager/admin.aspx");
}
}
}
else
{
Response.Write((""));
}
}
catch(Exception ex)
{
this.lblMessage.Text="数据库错误:"+ex.Message;
}
finally
{
con.Close();
}
}
3,发布新闻代码
c# code
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Text;
namespace webschool.admin.newsManager
{
///
/// addNews 的摘要说明。
///
public class addNews : System.Web.UI.Page
{
protected System.Data.SqlClient.SqlConnection con;
protected System.Data.SqlClient.SqlDataAdapter ada;
protected System.Data.SqlClient.SqlCommand cmd;
protected System.Data.SqlClient.SqlDataReader dr;
protected System.Web.UI.WebControls.Button btnAddNews;
protected System.Web.UI.WebControls.TextBox txtAuthor;
protected System.Web.UI.WebControls.Label lblMessage;
protected System.Web.UI.WebControls.TextBox txtNewsTitle;
protected System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1;
protected System.Web.UI.WebControls.DropDownList txtNewsType;
protected System.Web.UI.WebControls.Label lblTypeName;
protected System.Web.UI.WebControls.Label Label1;
protected FredCK.FCKeditorV2.FCKeditor FCKeditor1;
private void Page_Load(object sender, System.EventArgs e)
{
if(!this.Page.IsPostBack)
{
this.getClass();
string user = (string)Session["userclass"];
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.btnAddNews.Click += new System.EventHandler(this.btnAddNews_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
//获得新闻类型
private void getClass()
{
try
{
con=schoolDB.connection;
con.Open();
string strSQL = "select * from newsType";
cmd = new SqlCommand(strSQL,schoolDB.connection);
SqlDataReader dr = cmd.ExecuteReader();
this.txtNewsType.DataSource = dr;
txtNewsType.DataValueField = "NewsTypeID";
txtNewsType.DataTextField = "NewsTypeName";
txtNewsType.DataBind();
}
catch(Exception x)
{
this.lblMessage.Text="数据库错误:"+x.Message;
}
finally
{
con.Close();
}
}
//增加各类新闻的新闻数
private void addNewsNum()
{
try
{
con = schoolDB.connection;
int id = int.Parse(this.txtNewsType.SelectedItem.Value);
string sql= string.Format("update newsType set NewsNum=NewsNum+1 where newsTypeID='{0}'",id);
cmd = new SqlCommand(sql,con);
cmd.ExecuteNonQuery();
}
catch(Exception x)
{
Console.WriteLine(x.Message);
}
finally
{
con.Close();
}
}
private void getNewsTypeName()
{
try
{
int id =int.Parse(this.txtNewsType.SelectedItem.Value);
con=schoolDB.connection;
con.Open();
string strSQL = "select newsTypeName from newsType where newsTypeID='"+id+"'";
cmd = new SqlCommand(strSQL,con);
SqlDataReader dr = cmd.ExecuteReader();
while(dr.Read())
{
this.lblTypeName.Text=(string)dr["newsTypeName"];
}
}
catch(Exception x)
{
this.lblMessage.Text="数据库错误:"+x.Message;
}
finally
{
con.Close();
}
}
//增加新闻数到用户
private void addUserNum()
{
try
{
string username = (string)Session["username"];
con = schoolDB.connection;
con.Open();
string sql="update users set addNum=addNum+1 where username=@username";
cmd = new SqlCommand(sql,con);
cmd.Parameters.Add("@username",SqlDbType.VarChar,20);
cmd.Parameters["@username"].Value=username;
cmd.ExecuteNonQuery();
}
catch(Exception x)
{
Console.WriteLine(x.Message);
}
finally
{
con.Close();
}
}
//发布新闻
private void btnAddNews_Click(object sender, System.EventArgs e)
{
try
{
if(""==this.FCKeditor1.Value)
{
this.lblMessage.Text="请输入新闻内容,再提交!!";
}
else
{
int id =int.Parse(this.txtNewsType.SelectedItem.Value);
con=schoolDB.connection;
con.Open();
string strSQL = "select newsTypeName from newsType where newsTypeID='"+id+"'";
cmd = new SqlCommand(strSQL,con);
SqlDataReader dr = cmd.ExecuteReader();
if(dr.Read())
{
this.Label1.Text="您在新闻: ";
this.lblTypeName.Text=(string)dr["newsTypeName"];
dr.Close();
}
string newsTitle = this.txtNewsTitle.Text.Trim();
string newsTypeID = this.txtNewsType.SelectedItem.Value;
string newsTypeName = this.lblTypeName.Text.Trim();
string newsContent = this.FCKeditor1.Value;
string author = this.txtAuthor.Text.Trim();
string sql="insert newstable(title,newsTypeID,newsTypeName,newsContent,author,newDate)values(@newsTitle,@newsTypeID,@newsTypeName,@newsContent,@author,default)";
cmd = new SqlCommand(sql,con);
cmd.Parameters.Add("@newsTitle",SqlDbType.VarChar,500);
cmd.Parameters["@newsTitle"].Value=newsTitle;
cmd.Parameters.Add("@newsTypeID",SqlDbType.Int);
cmd.Parameters["@newsTypeID"].Value=newsTypeID;
cmd.Parameters.Add("@newsTypeName",SqlDbType.VarChar,20);
cmd.Parameters["@newsTypeName"].Value=newsTypeName;
cmd.Parameters.Add("@newsContent",SqlDbType.NText);
cmd.Parameters["@newsContent"].Value=newsContent;
cmd.Parameters.Add("@author",SqlDbType.VarChar,20);
cmd.Parameters["@author"].Value=author;
int result =cmd.ExecuteNonQuery();
if(result>0)
{
this.addNewsNum();
this.addUserNum();
this.lblMessage.Text="中添加数据成功!";
}
else
{
this.lblMessage.Text="服务器提示:数据添加失败!";
}
}
}
catch(Exception x)
{
this.lblMessage.Text="数据库错误:"+x.Message;
}
finally
{
con.Close();
}
}
}
}
3, 还有就是一些页面的问题 如CSS、DIV、JavaScript 等等使用只有慢慢去熟悉了。