自己動手做博客之日誌管理-5.3 管理日誌列表

   日誌列表的管理也包括添加、修改和刪除,在這裏製作的用戶控件名稱爲ucAdmin_Log.ascx,其頁面的佈局如圖1-17所示。

1-17  佈局日誌列表

    這裏同樣使用了GridView控件,這也是該控件最擅長的。單擊下方的“添加新日誌”鏈接將會打開LogAdd.aspx頁,如果單擊的是“編輯”鏈接將會轉到LogModify.aspx頁,當單擊“刪除”鏈接時會直接刪除該行。

1.顯示日誌列表

    GridView控件的IDgvLog,這裏綁定數據並顯示是由gbind1()方法完成的,如下所示:

    void gbind1()

    {

        dbconfig dbconn = new dbconfig();

        gvLog.DataSource = dbconn.CreateSource("select * from info");

        gvLog.DataBind();

        dbconn.Clear();

    }

    對於“刪除”鏈接的實現可以參考日誌分類中的代碼,這裏不再介紹。下面列出了單擊“編輯”鏈接時調用的gvLog_RowEditing()方法的代碼:

    protected void gvLog_RowEditing(object sender, GridViewEditEventArgs e)

    {

        GridViewRow gvr = (GridViewRow)gvLog.Controls[0].Controls[e.NewEditIndex+1];

        int id = int.Parse(gvr.Cells[0].Text);

        Response.Redirect("LogModify.aspx?id="+id);

    }

    從上述代碼中可以看到,首先獲取要編輯的行,再獲取行中日誌編號的值,然後將這個值傳遞給LogModify.aspx頁面的id參數,這個頁面我們會稍後介紹。

2.添加日誌

    添加日誌時可以指定新日誌的標題、所屬的欄目、日誌的摘要、日誌的作者、是否置頂顯示、日誌鏈接、日誌的引用地址以及日誌的正文內容,其中默認打開時只顯示前3項,單擊“高級選項”按鈕則可以打開完整模式,如圖1-18所示爲頁面的佈局。

1-18  佈局添加日誌頁面

    在圖1-18所示的佈局中日誌的摘要和內容都是使用的第三方控件FreeTextBox控件,這個控件是一個免費的.NET HTML編輯器,讀者可以到http://freetextbox.com/download/網址下載最新版本,在頁面中使用FreeTextBox控件之前,應該先在項目中添加對該控件DLL文件的引用。具體的操作如下:

    (1)通過下載得到FreeTextBox控件的壓縮包並解壓。

    (2)打開項目,在【解決方案資源管理器】窗格中右擊項目名稱選擇【添加引用】命令,打開【添加引用】對話框。

    (3)在對話框中通過【瀏覽】選項卡選擇解壓包中的FreeTextBox.dll文件,再單擊【確定】按鈕,如圖1-19所示。

1-19  添加引用

    (4)複製解壓包中的ftb.imagegallery.aspx到要使用FreeTextBox的目錄(當然可以是其他,但是可能要設置路徑)。

    (5)像使用普通控件一樣,將它添加布局並修改控件的其他屬性。這時打開源代碼視圖,會在頁面的頂部找到如下代碼:

<%@ Register TagPrefix="FTB" Namespace="FreeTextBoxControls" Assembly="FreeTextBox" %>

    這行爲FreeTextBox控件的註冊代碼,指定使用的程序集、命名空間和引用標籤。添加控件後會生成類似如下的代碼:

  <FTB:FreeTextBox ID="Free1"   ImageGalleryPath="~/ImageAdmin"

        runat="server" Text='' Language="zh-CN"

        ButtonDownImage="True" Height="200"

        ToolbarLayout="ParagraphMenu,FontFacesMenu,FontSizesMenu,FontForeColorsMenu|Bold,Italic,Underline,Strikethrough;Superscript,Subscript,RemoveFormat|JustifyLeft,JustifyRight,JustifyCenter,JustifyFull;BulletedList,NumberedList,Indent,Outdent;CreateLink,Unlink,InsertImage,InsertImageFromGallery,InsertRule|Cut,Copy,Paste;Undo,Redo,Print">

  </FTB:FreeTextBox>

    屬性Language="zh-CN"指定控件顯示的提示爲簡體中文,它還自帶了多種語言,可參見幫助文件修改。

    添加日誌是博客系統的核心功能,而且是管理員的特權。打開LogAdd.aspx頁面的後臺代碼,在Page_Load中添加如下所示代碼:

dbconfig dbconn = new dbconfig();

protected void Page_Load(object sender, EventArgs e)

{

    if (Session["admin"] == null)

    {

        Response.Redirect("Log_Admin.aspx");

    }

    if (!IsPostBack)

    {

    DropDownList1.DataSource = dbconn.CreateSource("select id,sortName from infosort");

    DropDownList1.DataBind();

    }

}

    第二個if中的語句將日誌分類信息綁定到下拉列表框,供管理員選擇新日誌的類別,DropDownList1是下拉列表框的ID,它的佈局代碼如下所示:

<asp:DropDownList ID="DropDownList1" runat="server" Width="200px" DataTextField="sortName" DataValueField="id">

        <asp:ListItem Value="0" Selected="True"></asp:ListItem>

</asp:DropDownList>

    DataTextField屬性指定在列表框中顯示的文本爲sortName(日誌類別名稱)字段的數據,DataValueField屬性指定在選擇後得到的值爲id(日誌類別編號)字段的數據。

    最後介紹單擊“發佈”按鈕後添加日誌的代碼,這些代碼可分爲三個過程,首先獲取用戶輸入的新日誌數據,再針對這些數據進行處理,然後添加到數據庫並返回。完整的實現代碼如下所示,在代碼中包含一些重要註釋:

 string strSQL,Title,Abstrack,Content,Author,Link,IP,URL;

 int SortId,HomeTop;

 protected void btnAdd_Click(object sender, EventArgs e)

 {

       Abstrack = digest.Text;  //獲取摘要內容

       Title=title.Text;  //獲取標題

       Content = Free1.Text;  //獲取正文內容

       Author = author.Text;

       Link = link.Text;

       IP = Request.UserHostAddress;   //獲取IP地址

       URL = url.Text;

       SortId =System.Int16.Parse(DropDownList1.SelectedValue);   //獲取類別編號

       HomeTop=hometop.Checked ? 1 : 0;   //是否置頂

       strSQL = "insert into info(title,author,abstract,content,sortId,link,[date],ip,homeTop,url) values(";

       strSQL+="'"+ Title + "','"+Author+"','"+Abstrack+"','"+Content+"',"+SortId +",'"+ Link+"',";

       strSQL+="'"+DateTime.Now.ToString()+"','"+IP+"'," +HomeTop+",'"+URL+"')";

       dbconn.ExecuteNonQuery(strSQL);

       dbconn.Clear();

       Response.Write("<script>alert('添加成功');window.location.href='Default.aspx';</script>");

 }

3.修改日誌

    當單擊“編輯”按鈕就會跳轉到修改頁面,這個頁面中除了需要一個id參數指修改日誌的編號外,還需要對權限進行驗證,以及綁定顯示日誌的類別,這些可參考LogAdd.aspx頁的Page_Load()方法。如圖1-50所示爲修改日誌時的效果。

1-20  修改日誌

    如圖1-20所示,修改頁面LogModify.aspx要完成兩大功能,第一個是在頁面載入時讀取日誌的內容並顯示,另一個則是再單擊“保存修改”按鈕後更新日誌的數據。第二個功能與添加日誌相似這裏不再介紹,下面介紹讀取日誌的實現,主要是使用了自定義的方法getContent(),代碼如下:

    void getContent() {

        string strsql = "select * from info where id=" + Request["id"];

        dbconfig dbconn = new dbconfig();

        SqlCommand cmd=new SqlCommand(strsql,dbconn.conn);

        SqlDataReader dr=cmd.ExecuteReader();

        if(dr.Read())

        {

            title.Text = dr["title"].ToString();     //標題

            author.Text = dr["author"].ToString();

            digest.Text = dr["abstract"].ToString();  //摘要

            Free1.Text = dr["content"].ToString();    //正文

            string sortid = dr["sortID"].ToString();

            DropDownList1.SelectedValue = sortid;    //日誌分類

            link.Text = dr["link"].ToString();

            hometop.Checked = dr["homeTop"].ToString() == "1" ? true : false;

            url.Text = dr["url"].ToString();

        }

        dr.Close();

        dbconn.Clear();

    }

    getContent()方法在頁面的Page_Load()方法中調用,然後使用SqlDataReader對象的Read()方法來逐項讀取數據並顯示,最後關閉連接。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章