《ASP.NET辦公自動化系統開發執行個體導航》筆記二 系統管理模組設計

來源:互聯網
上載者:User
首先設計的是[系統管理]模組,這也是一般系統的步驟.
簡略的UML活動圖表如下:

資料庫有:
登入日誌資訊表LogInfo
動作記錄資訊表sysOptLog
機構基本資料表mrBranch
部門基本資料表mrDepartment    [機構比部門大一級,機構可以包括多個部門]
人員基本資料表mrBaseInf    [也就是使用者表]
模組基本資料表sysFuncDic
角色基本資料表sysRolesDic
使用者角色關係表sysEmpRoles
模組角色關係表sysFuncRights
目錄基本資料表sysTab

一個使用者可以對應多個角色,而一個角色可以包含多個使用者:一個角色可以包含多個模組,一個模組也可以對應多個角色.所以,他們全部都是多對多的關係,可以處理複雜的許可權問題.

一.管理登入日誌

對SQL操作全部使用預存程序.;對所有的頁面全部繼承基類PageBase.cs
1.通用類中用到一個比較常用的函數:(刪除不可見字元函數)

public static string DeleteUnVisibleChar(string sourceString)
        {
            System.Text.StringBuilder sBuilder = new System.Text.StringBuilder(131);
            for(int i = 0;i < sourceString.Length; i++)
            {
                int Unicode = sourceString[i];
                if(Unicode >= 16)
                {
                    sBuilder.Append(sourceString[i].ToString());
                }                
            }
            return sBuilder.ToString();
        }

2.自由操縱DataGrid.
可以使用一些技巧來自由操縱DataGrid:
(1)比如要在每行頭部加入CheckBox,可以加入一個模板列,模板中放入一個CheckBox控制項:

<asp:TemplateColumn>
    <ItemTemplate>
        <asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
    </ItemTemplate>
</asp:TemplateColumn>

其他的繫結資料行不要變,這樣就會出現一個CheckBox,比如用於選中的多項刪除操作.但是如何在程式中實現刪除操作呢?首先將datagrid的DataKeyField關鍵字段設定為要刪除所需的關鍵字段(比如使用者ID),然後在刪除處理時,通過對每行的第一列的第一個控制項(即CheckBox,但沒有ID,所以必須這樣做)來判斷:                 foreach(DataGridItem thisItem in DataGridLogininfo.Items)
                {
                    if(((CheckBox)thisItem.Cells[0].Controls[1]).Checked)    //表示此一行的第一列中的第一個控制項
                    {
                        string strLoginID = DataGridLogininfo.DataKeys[thisItem.ItemIndex].ToString();    //設定DataGridLogininfo的DataKeyField為LoginID
                    
                        DelLoginLog(strLoginID);
                    }
                }

這樣,"全部選中"的CheckBox2的代碼也簡單了:

            foreach(DataGridItem thisItem in DataGridLogininfo.Items)
            {
                ((CheckBox)thisItem.Cells[0].Controls[1]).Checked = CheckBox2.Checked;
            }

同樣,我們可以擴充,比如為每條記錄前面加個序號,如何加?
有兩種方法:
第一種,和前面一樣,加一個模板列,用一個頁面全域變數的number++;
第二種,對綁定前得到的DataTable進行處理,加入一列:

            DataTable    mytable=myclass.Getalllogininfo ();
            DataColumn  mycolumn=  mytable.Columns.Add ("number",System.Type .GetType ("System.String"));    //在資料來源DataTable中加入一列,注意技巧
            for (int i=0;i<mytable.Rows.Count ;i++)
            {
                mytable.Rows [i]["number"]=(i+1).ToString ();
            }

這是一個很重要的方法,如果要對綁定資料實現複雜的操作,常常要用到這個原理.

還有,如何加入比較複雜的功能,比如,滑鼠到每一條記錄上都變色呢?
這個可以通過DataGrid的ItemDataBound事件來處理,可以給每一項加上屬性,方法如下:

        //綁定Javascript指令碼到每行,是滑鼠指向時顏色變化
        private void DataGridLogininfo_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        {
            ListItemType itemType = e.Item.ItemType;
            if (itemType == ListItemType.Item )
            {
                
                e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor='#dedfde';";
                e.Item.Attributes["onmouseover"] = "javascript:this.style.backgroundColor='#fff7ce';cursor='hand';" ;

            }
            else if( itemType == ListItemType.AlternatingItem)
            {
                e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor='#ffffff';";
                e.Item.Attributes["onmouseover"] = "javascript:this.style.backgroundColor='#fff7ce';cursor='hand';" ;
            }
        }

二.管理動作記錄
與上面一個沒什麼區別,同樣要利用PageBase的PageBegin方法,這樣可以確定所在的模組並檢查許可權,頁面基類的好處已經體現出來了.

檢視狀態ViewState在ASP.NET裡是預設存在的,在表單的發送之間幾乎所有的ASP.NET控制項都會保留屬性值.它實際上就是一個隱藏的表單域,即HIDDEN的INPUT.

為伺服器控制項添加javascript指令碼: Button1.Attributes.Add("onclick", "javascript:alert('cool!'");

三.模組管理
模組管理再次證明了一點:只有想不到,沒有做不到的.
裡面對於許可權的DataList綁定CheckBoxList的複雜處理可謂精彩絕倫.

如果對於綁定到DataList等裡面的控制項操作,一般都要使用
(ControlType)DataList.Items[Index].FindControl("ControlName")來取得控制項,然後進行處理.

對於命令按鈕,都要設定CommandName,然後在DataList_ItemCommand裡面通過判斷來進行處理,所以CommandName不僅僅是可以用edit或delete,還可以多種多樣,處理十分靈活.

由於類中的串連常常是局部變數,外部調用時不可能關閉,所以用
DataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
這樣自動關閉串連比較實用.

四.目錄管理
這裡主要有一個知識點:如果編輯比較簡單,可以直接用DataGrid的自有編輯方法:
這裡,主要有dgCatalog_EditCommand,dgCatalog_DeleteCommand,dgCatalog_CancelCommand,dgCatalog_UpdateCommand這幾個事件.同樣,都是先取得DataKey關鍵字,然後進行處理;Update的時候,同樣是取得(TextBox)Cells[0].Controls[1].Text這樣的值,然後再運行預存程序等等更新.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.