翻譯]動態創建GridView的列(第一部分)

翻譯]動態創建GridView的列(第一部分)


原文發佈日期:2006.10.27
作者:Bipin Joshi
翻譯:webabcd


介紹
幾個月前我寫了三篇文章:動態創建DataGrid的列動態創建DataGrid的模板列(一)動態創建DataGrid的模板列(二)。甚至到今天這些文章依舊是閱讀排行榜的前幾名。這說明了很多開發人員都要動態的創建gird控件。從這篇文章開始,我將寫一系列的文章來講述如何創建諸如GridView和DetailsView這樣的數據綁定控件。本文的第一部分會說明如何增加綁定字段和命令字段,從而實現更多的功能,如分頁,排序,編輯等。


新建一個web站點實例
在Visual Studio裏新建一個web站點。拖拽一個GridViw控件和一個SqlDataSource控件到默認的webform上。不要在設計階段設置控件的任何屬性,我們將通過編碼實現它的功能。

下面給出在Page_Load事件中的代碼
protected void Page_Load(object sender, EventArgs e)
{
    SqlDataSource1.ConnectionString 
= @"data source=.;initial catalog=northwind;integrated security=true";
    SqlDataSource1.SelectCommand 
= "select employeeID,FirstName,LastName from employees";
    SqlDataSource1.UpdateCommand 
= "update employees set firstname=@FirstName,lastname=@LastName where employeeid=@EmployeeID";
    SqlDataSource1.UpdateParameters.Add(
"@FirstName""");
    SqlDataSource1.UpdateParameters.Add(
"@LastName""");
    SqlDataSource1.UpdateParameters.Add(
"@EmployeeID""");

    
if (!IsPostBack)
    
{
        GridView1.DataSourceID 
= "SqlDataSource1";
        GridView1.AutoGenerateColumns 
= false;
        GridView1.DataKeyNames 
= new string[] "EmployeeID" };
        GridView1.AllowPaging 
= true;
        GridView1.AllowSorting 
= true;
        GridView1.PageSize 
= 5;

        BoundField bf1 
= new BoundField();
        BoundField bf2 
= new BoundField();
        BoundField bf3 
= new BoundField();

        bf1.HeaderText 
= "Employee ID";
        bf1.DataField 
= "EmployeeID";
        bf1.ReadOnly 
= true;
        bf1.SortExpression 
= "EmployeeID";

        bf2.HeaderText 
= "First Name";
        bf2.DataField 
= "FirstName";
        bf2.SortExpression 
= "FirstName";

        bf3.HeaderText 
= "Last Name";
        bf3.DataField 
= "LastName";
        bf3.SortExpression 
= "LastName";

        CommandField cf 
= new CommandField();
        cf.ButtonType 
= ButtonType.Button;
        cf.ShowCancelButton 
= true;
        cf.ShowEditButton 
= true;

        GridView1.Columns.Add(bf1);
        GridView1.Columns.Add(bf2);
        GridView1.Columns.Add(bf3);
        GridView1.Columns.Add(cf);
    }

}

接下來我們一步一步地對這些代碼做說明。

配置SQL數據源控件。
這段代碼設置ConnectionString屬性是給SQL數據源控件配置所需的數據庫連接字符串所用的。在我們的例子裏,我們將使用Notthwind數據庫裏的Employees表。然後給SelectCommand和UpdateCommand屬性設置相應的select和update語句。update語句很重要,注意在update聲明裏所列舉的參數名稱要和數據表裏列的名字相匹配。update聲明包含三個參數,@FirstName, @LastName 和 @EmployeeID。這些參數然後會被添加到UpdateParameters集合裏。

配置GridView控件
GridView控件使用SqlDataSource1作爲它的數據源。代碼裏已經指出瞭如何設置GridView的DataSourceID屬性。然後要設置更多的GridView屬性,注意你只需要在"if"條件裏設置這些屬性一次。AutoGenerateColumns屬性指明瞭GridView的列是否是自動建立的。應爲我們希望通過編碼增加列,所以要把這個屬性設置爲false。DateKeyNames屬性是一個關鍵字列的字符串數組。AllowPaging和AllowSorting屬性分別對應分頁和排序特性。PageSize屬性將頁大小設爲5。

創建BoundFiled列
GridView控件包含一些諸如BoundField,HyperLinkField,和TemplateField這些類型之類的列。在這個例子中我們將使用BoundField列。我們需要給EmployeeID,FirstName和LastNam分別提供三個BoundFiled列。一個bound filed是通過聲明BoundField來創建的。BoundField的HeaderText屬性是用來指出列的標題的。是否給出SortExpression屬性決定着bound filed是否可以被排序。如果SortExpression屬性設置成了一個列的名字,那麼bound field將以此爲基礎進行排序。EmployeeID列是作爲關鍵字被顯示的,所以要把它的ReadOnly屬性設置爲true,其用意是該列不能被編輯。

爲了提供編輯特性,你需要給GridView增加一個CommandField列。其ButtonType屬性用來指明按鈕是以何種形式來呈現的,其可能的值有Button,LinkButton和ImageButton。ShowCancelButton和ShowEditButton屬性決定了是否顯示編輯和取消按鈕。

一旦我們創建了列,它們就會在GridView中增加相應的列。

本文到此結束!如果你運行這個webform將會如下顯示。


你可以測試GridView的分頁,排序和編輯等屬性。


作者:Bipin Joshi
Email:http://www.dotnetbips.com/contact.aspx
簡介:Bipin Joshi是DotNetBips.com的管理員。他是http://www.binaryintellect.com/的發起人,這個公司提供.NET framwork的培訓和諮詢服務。他在印度孟買爲開發者提供培訓。他也是微軟的MVP(ASP.Net)和ASPInsiders的會員。  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章