.NET基礎之DataList控制元件

iDotNetSpace發表於2009-05-25

主要屬性:
RepeatDirection:項的佈局方向。
RepeatColumns:該佈局的列的數目,預設為0.即不限制。
使用 DataList 控制元件顯示模板定義的資料繫結列表。DataList 控制元件支援選擇和編輯。 DataList 控制元件的內容可以通過使用模板操控。下表列出了支援的模板。
ItemTemplate為預設模版,如果繫結了資料,則在該模版中編輯顯示專案。

模板名稱
 說明
 
AlternatingItemTemplate
 如果已定義,則為 DataList 中的交替項提供內容和佈局。如果未定義,則使用 ItemTemplate。
 
EditItemTemplate
 如果已定義,則為 DataList 中當前編輯的項提供內容和佈局。如果未定義,則使用 ItemTemplate。
 
FooterTemplate
 如果已定義,則為 DataList 的腳註部分提供內容和佈局。如果未定義,將不顯示腳註部分。
 
HeaderTemplate
 如果已定義,則為 DataList 的頁首節提供內容和佈局。如果未定義,將不顯示頁首節。
 
ItemTemplate
 為 DataList 中的項提供內容和佈局所要求的模板。
 
SelectedItemTemplate
 如果已定義,則為 DataList 中當前選定項提供內容和佈局。如果未定義,則使用 ItemTemplate。
 
SeparatorTemplate
 如果已定義,則為 DataList 中各項之間的分隔符提供內容和佈局。如果未定義,將不顯示分隔符。
 


分頁顯示DataList控制元件中的資料
該分頁內碼表適用於Repeater控制元件等其他資料類控制元件。頁面原始碼新增一個DataList控制元件(DataList1),在頁尾模版中新增翻頁控制相關按鈕。

Code

               
               


                   
                       
                   
               

                           

                            共
                           
                            頁 當前為第
                           
                            頁
                           
                           
                           
                           
                       

           

cs程式碼:

Code
private PagedDataSource pds()
    {
       //此處為GridView1繫結資料庫 
       SqlConnection myConn = GetConnection(); 
        myConn.Open(); 
        string sqlStr = "select * from test"; 
        SqlDataAdapter myDa = new SqlDataAdapter(sqlStr, myConn); 
        DataSet myDs = new DataSet(); 
        myDa.Fill(myDs);
        PagedDataSource pds = new PagedDataSource();
        //初始化一個PagedDataSource,允許控制元件分頁
        pds.DataSource = myDs.Tables[0].DefaultView;
        //將上面的ds轉換成標準資料檢視
        pds.AllowPaging = true;
        //允許分頁
        pds.PageSize = 5;
        //每頁大小為5 
        pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString["page"]);
        //設定當前頁
        return pds;
        //將處理完畢的pds物件發出去
    }
protected void DataList1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (Request.QueryString["name"] == null)
        {
            if (e.Item.ItemType == ListItemType.Footer)
            {//判斷當前項是頁尾模板
                int n = pds().PageCount;//將分頁總數賦給變數n
                int i = pds().CurrentPageIndex;//將當前分頁碼賦給i 
                Label lblpc = (Label)e.Item.FindControl("lblpc");
                lblpc.Text = n.ToString();
                //找到lblpc這個Label,將總頁碼賦給他
                Label lblp = (Label)e.Item.FindControl("lblp");
                lblp.Text = Convert.ToString(pds().CurrentPageIndex + 1);
                //找到lblp這個Label,將當前頁碼賦給他,但是注意,因為頁碼從0開始,這裡要直觀的話就得加1
                HyperLink hlfir = (HyperLink)e.Item.FindControl("hlfir");
                //這裡調整為自己網頁需要到的連線
                hlfir.NavigateUrl = "?Type=" + Server.UrlEncode(Request.QueryString["Type"]) + "&page=0";
                HyperLink hlla = (HyperLink)e.Item.FindControl("hlla");
                hlla.NavigateUrl = "?Type=" + Server.UrlEncode(Request.QueryString["Type"]) + "&page=" + Convert.ToInt32(n - 1);
                //找到表示最前頁和末頁的Label,為他們的NavigateUrl屬性賦為第0頁和最大頁碼減1
                HyperLink hlp = (HyperLink)e.Item.FindControl("hlp");
                HyperLink hln = (HyperLink)e.Item.FindControl("hln");
                //找到表示上頁和下頁這兩個控制元件
                if (i <= 0)
                {//如果當前頁已經是第0頁
                    hlp.Enabled = false;
                    hlfir.Enabled = false;
                    hln.Enabled = true;
                }
                else
                {
                    hlp.NavigateUrl = "?Type=" + Server.UrlEncode(Request.QueryString["Type"]) + "&page=" + Convert.ToInt32(i - 1);
                }
                if (i > n - 2)
                {//如果當前項已經是最末頁
                    hln.Enabled = false;
                    hlla.Enabled = false;
                    hlp.Enabled = true;
                }
                else
                {
                    hln.NavigateUrl = "?Type=" + Server.UrlEncode(Request.QueryString["Type"]) + "&page=" + Convert.ToInt32(i + 1);
                }
            }
        }
    }

顯示、編輯、更新資料

在DataList模版中新增LinkButton控制元件,併為其繫結資料,設定CommandName屬性和Click事件來實現對資料的顯示、編輯、更新、取消。在DataList中CommandName接受預設值為:Edit、Delete、Update、Cancel。如果值不為上述4種,則在ItemCommand中自行定義。
在頁面原始碼中新增DataList控制元件(DataList1),設定了ItemTemplate、EditItemTemplate、SelectedItemTemplate三種模版,分別對應預設顯示模版,編輯模版和選擇模版。

Code
        nItemCommand="DataList1_ItemCommand" nCancelCommand="DataList1_CancelCommand"
        nUpdateCommand="DataList1_UpdateCommand" nEditCommand="DataList1_EditCommand">
       
            //用於錄入name欄位的值;點選Button_up,完成修改;點選Button_ca,退出EditItemTemplate模版,回到ItemTemplate模版。
           
           
           
       

       
            //顯示選中行的詳細資訊
            Id:
           
           

            Name:
           
           

       

         
            //預設顯示資料庫中id欄位值,點選LinkButton_se,顯示詳細資訊SelectedItemTemplate模版,進入;點選Button_ed,進入EditItemTemplate模版。
             Id:
          

       

   

cs程式碼:

Code
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
    {
        if (e.CommandName == "select")
        {
            DataList1.SelectedIndex = e.Item.ItemIndex;
            DataList1.DataBind();
        }
    }
    protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e)
    {
            DataList1.SelectedIndex = -1;
            DataList1.DataBind();
    }
    protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
    {
       //取得編輯行的關鍵欄位的值
        string id = DataList1.DataKeys[e.Item.ItemIndex].ToString();
        //取得文字框中輸入的內容
        string name = ((TextBox)e.Item.FindControl("TextBox_name")).Text;
        //更新資料庫
        string sql = "update test set name='" + name + "'";
        string myStr = ConfigurationManager.AppSettings["ConnectionString"].ToString();
        SqlConnection myConn = new SqlConnection(myStr);
        myConn.Open();
        string sqlStr = "select * from test";
        SqlCommand myCmd = new SqlCommand(sqlStr, myConn);
        myCmd.ExecuteNonQuery();
        myCmd.Dispose();
        myConn.Close();
        //取消編輯狀態
        DataList1.SelectedIndex = -1;
        DataList1.DataBind();
    }
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
    {
        DataList1.SelectedIndex = e.Item.ItemIndex;
        DataList1.DataBind();
    }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-604085/,如需轉載,請註明出處,否則將追究法律責任。

相關文章