欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
[翻譯]用DataSource控件以外的方法為GridView提供數據 - 專(zhuān)注于.Net WebApplication技術(shù) - 博客園

譯序:此文章是今天在http://www.asp.net首頁(yè)發(fā)現的,詳細內容地址是http://www.dotnetbips.com/articles/displayarticle.aspx?id=511,作者Bipin Joshi。題目為Working with GridView without using Data Source Controls。

本文是根據原文的意思加自己的理解來(lái)翻譯的,這段時(shí)間自己翻譯過(guò)幾篇其它的文章,發(fā)現對于有些地方的翻譯真的就不能按照英文的愿意來(lái),這也可能是文化差異的不同,所以我每篇翻譯都強調是“按照自己的理解”來(lái)翻譯,而且,是在保留作者原文的意思的基礎之上。

 

介紹:

大多數的文章和演練都是介紹如何用DataSource控件來(lái)配合GridView來(lái)工作的。當一個(gè)GridView被指定到一個(gè)DataSource控件的時(shí),系統就會(huì )自動(dòng)完成其分頁(yè)和排序的功能,而我們基本上是不用寫(xiě)一行代碼的。然而,我們也會(huì )碰到直接把DataViewDataTable作為GridView綁定的對象的時(shí)候。幸運的是,GridView是可以用DataSource控件以外的方法來(lái)綁定數據的。但是需要開(kāi)發(fā)人員敲額外的一些代碼,而你對ASP.NET1.XDataGrid很熟悉的話(huà),就會(huì )發(fā)現其過(guò)程是很象的。本文我們將來(lái)完成直接用DataView(或者DataTable)綁定到GridView如何操作的,并且在此基礎上實(shí)現分頁(yè)和編輯等功能。

示例:雇員列表

我們用Northwind數據庫的Employees表來(lái)做這個(gè)示例。在VS2005里新建一個(gè)站點(diǎn),然后創(chuàng )建一個(gè)webform,拖拽一個(gè)GridView控件到此頁(yè)面上。用下圖的方法為GridView填加三個(gè)BoundFields和一個(gè)CommandField。

 

按照如下的表來(lái)設置各BoundField的屬性

BoundField

HeaderText

DataField

ReadOnly

Employee ID

Employee ID

EmployeeID

true

First Name

First Name

FirstName

false

Last Name

Last Name

LastName

false

進(jìn)入到codebehind頁(yè)(也可能是code file),填加如下的代碼到Page_Load事件:

protected void Page_Load(object sender, EventArgs e)

{

if(!IsPostBack)

{

BindGrid();

}


}

然后,我們讓頁(yè)面在第一次顯示的時(shí)候調用BindGrid()方法。這個(gè)方法是我們自定義的方法,后面我們將介紹它的具體實(shí)現。這個(gè)方法實(shí)際上是讓一個(gè)DataView綁定到一個(gè)GridView上。而這個(gè)DataView里面是Employees表里的所有記錄。

實(shí)現分頁(yè):

首先需要把GridViewAllowPaging屬性設置為True,這樣我們才可以實(shí)現分頁(yè)的功能。然后我們把PageSize屬性設置成3。這里有兩個(gè)和分頁(yè)有關(guān)的方法,它們分貝是:

·PageIndexChanging

·PageIndexChanged

第一個(gè)方法是在當前頁(yè)的這個(gè)屬性改變的時(shí)候被觸發(fā)的,第二個(gè)方法是這個(gè)屬性已經(jīng)被更改以后觸發(fā)的。而前一個(gè)方法你是可以在分頁(yè)的時(shí)候終止這個(gè)(分頁(yè))操作的。

GridViewPageIndexChanging事件里我們寫(xiě)如下的代碼:

protected void GridView1_PageIndexChanging

(
object sender, GridViewPageEventArgs e)

{

GridView1.PageIndex 
= e.NewPageIndex;

BindGrid();

}

PageIndexChanging事件句柄里接收一個(gè)GridViewPageEventArgs類(lèi)型的參數。這個(gè)參數通過(guò)一個(gè)叫做NewPageIndex的屬性來(lái)獲得用戶(hù)選擇的新頁(yè)的頁(yè)碼。我們再次調用BindGrid()方法把GridViewPageIndex的屬性設置成新頁(yè)碼。GridView就會(huì )把相應的內容顯示出來(lái)。下面的截圖是GridView實(shí)現分頁(yè)以后的效果

 

實(shí)現排序:

實(shí)現排序的方法相對來(lái)說(shuō)就要多做一些工作。首先,需要把GridViewAllowSorting屬性設置成True,然后,我們要給需要進(jìn)行排列的BoundField列上設置SortExpression屬性.當你給相應的列設置好這個(gè)屬性以后你就會(huì )發(fā)現這個(gè)列的頭邊成了一個(gè)可點(diǎn)擊的Link button.單擊它會(huì )觸發(fā)如下的兩個(gè)事件:

·Sorting

·Sorted

和分頁(yè)方法一樣這兩個(gè)方法是有前后區別的。而Sorting事件也同樣允許你取消這個(gè)(排序)動(dòng)作。

排序事件的句柄接收一個(gè)GridViewSortEventArgs類(lèi)型的參數。GridViewSortEventArgs類(lèi)有三個(gè)重要的屬性。SortExpression屬性提供先前你指定的排序表達式。SortDirection屬性描述是采用升序排序還是降序排序。著(zhù)兒歌屬性在你用自己創(chuàng )建的列表里排序是沒(méi)什么用的,但是,當你用DataSource控件來(lái)為GridView做數據源的話(huà)它會(huì )為你自動(dòng)指定排序的方法并且你可以通過(guò)通過(guò)這個(gè)屬性利用getset的方法指定排序的方向。

既然我們不是用DataSource控件來(lái)作為數據源那么我們需要自己來(lái)寫(xiě)排序的事件。我們用如下的方法來(lái)存儲一個(gè)ViewState變量,填加如下代碼到Sorting事件中。

protected void GridView1_Sorting(object sender, 

GridViewSortEventArgs e)

{

ViewState[
"sortexpression"= e.SortExpression;

 

if (ViewState["sortdirection"== null)

{

ViewState[
"sortdirection"= "asc";

}


else

{

if (ViewState["sortdirection"].ToString() == "asc")

{

ViewState[
"sortdirection"= "desc";

}


else

{

ViewState[
"sortdirection"= "asc";

}


}


BindGrid();

}


這里我們用一個(gè)sortexpressionViewState變量來(lái)存儲SortExpression屬性。我們需要在BindGrid()方法里使用這個(gè)變量來(lái)讓排序在所有情況下都能正確進(jìn)行。同樣我們也用一個(gè)叫做sortdirectionViewState變量來(lái)存儲當前的排序方式。最后,我們調用DataBind()方法來(lái)把DataView里排序后的數據綁定給此數據網(wǎng)格。

下圖是實(shí)現排序以后的效果

 

實(shí)現編輯功能:

為了能在GridView里編輯記錄我們加入了一個(gè)CommandFieldsGridView里,默認情況下你會(huì )看到它是一個(gè)title屬性為editlink button.當我們單擊它以后觸發(fā)RowEditing事件并且編輯按鈕變成了“更新”和“取消”按鈕。單擊“更新”按鈕會(huì )出發(fā)RowUpdating事件,單擊“取消”按鈕會(huì )觸發(fā)RowCancelingEdit事件。我們需要寫(xiě)入自己在RowUpdating事件里寫(xiě)自己的更新代碼。

填加如下的代碼到RowEditing事件當中:

protected void GridView1_RowEditing

(
object sender, GridViewEditEventArgs e)

{

GridView1.EditIndex 
= e.NewEditIndex;

BindGrid();

}

RowEditing事件接收一個(gè)GridViewEditEventArgs類(lèi)型的變量。類(lèi)GridViewEditEventArgs有一個(gè)屬性叫做NewEditIndex來(lái)告訴我們用戶(hù)單擊的那一行的行號。然后根據這個(gè)值我們設置到GridViewEditIndex的值。這會(huì )使GridView進(jìn)入到編輯模式,如下圖:

 

注意EmployeeID這一列是不能被編輯的因為這個(gè)列已經(jīng)被標志成ReadOnly.

然后我們填加如下代碼到RowCancelingEdit事件當中。

protected void GridView1_RowCancelingEdit

(
object sender, GridViewCancelEditEventArgs e)

{

GridView1.EditIndex 
= -1;

BindGrid();

}

這里我們把EditIndex的值設置成-1告訴系統我們現在要取消編輯操作。

最后,我們來(lái)看看RowUpdating事件的代碼:

protected void GridView1_RowUpdating

(
object sender, GridViewUpdateEventArgs e)

{

int empid;

string fname, lname;

empid 
= int.Parse(GridView1.Rows[e.RowIndex].

Cells[
0].Text);

fname 
= ((TextBox)GridView1.Rows[e.RowIndex].

Cells[
1].Controls[0]).Text;

lname 
= ((TextBox)GridView1.Rows[e.RowIndex].

Cells[
2].Controls[0]).Text;

 

SqlConnection cnn 
= new SqlConnection(@"data source=

.\sqlexpress;initial catalog=northwind;integrated 

security=true
");

cnn.Open();

SqlCommand cmd 
= new SqlCommand("update employees set 

firstname
=@fname,lastname=@lname where employeeid=@empid",

 cnn);

cmd.Parameters.Add(
new SqlParameter("@fname",fname));

cmd.Parameters.Add(
new SqlParameter("@lname", lname));

cmd.Parameters.Add(
new SqlParameter("@empid", empid));

cmd.ExecuteNonQuery();

cnn.Close();

 

GridView1.EditIndex 
= -1;

BindGrid();

}


這里我們先得到在TextBox里我們輸入的值。RowUpdating方法接收一個(gè)GridViewUpdateEventArgs類(lèi)型的變量,GridViewUpdateEventArgs類(lèi)有一個(gè)叫做RowIndex的屬性告訴系統哪一行正在被更新。系統用GridViewRows集合來(lái)獲得新輸入的值。注意系統是怎么利用CellsControls集合的。Cells集合包含了所有正在被編輯的這些列的對象。Controls集合存儲所把所有的空間都存儲成Control類(lèi)型。因此系統需要把這些控件變成TextBox類(lèi)型的對象。然后我們再用connection,command等數據庫對象執行一個(gè)UPDATE操作。當更新操作完成后,系統會(huì )把GridViewEditIndex屬性設置成-1來(lái)完成更新操作。

BindGrid()方法:

前面我們提到過(guò)的這個(gè)方法,其代碼如下:

private void BindGrid()

{

DataSet ds 
= new DataSet();

SqlDataAdapter da 
= new SqlDataAdapter

(
"select * from employees"@"data source=

.\sqlexpress;initial catalog=northwind;

integrated security=true
");

da.Fill(ds,
"employees");

DataView dv 
= ds.Tables[0].DefaultView;

 

if (ViewState["sortexpression"!= null)

{

dv.Sort 
= ViewState["sortexpression"].ToString() 

+ " " + ViewState["sortdirection"].ToString();

}


 

GridView1.DataSource
=dv;

GridView1.DataBind();

}


通過(guò)這個(gè)方法,我們把Employees表里的數據填充到一個(gè)DataSet里。然后基于employees表創(chuàng )建一個(gè)DataView,再根據Sort屬性來(lái)對其排序。每一列需要排序的屬性都從ViewState變量里獲得sortexpression屬性。而當排序正在進(jìn)行的時(shí)候也同樣是用到了這個(gè)變量,還記得我們在Sorting事件里設置的那兩個(gè)屬性嗎?就是它們。最后,我們把GridViewDataSource屬性在DataBind()方法里設置成這個(gè)DataView。

總結

GridView是可以不用DataSource控件直接綁定到DataViewDataTable上的。我們同樣可以實(shí)現分頁(yè),排序和編輯的功能。只不過(guò),我們需要自己寫(xiě)相應的代碼而已。

 

譯者后續:

整體來(lái)說(shuō)這個(gè)文章的難度不是很大,不過(guò)卻涉及到了最基本的ASP.NET的編程模型,目的是希望幫助更多的人來(lái)了解ASP.NET.讓大家更熟悉其結構和運行模式,也可以讓更多的人順著(zhù)此思路來(lái)更深一層次的掌握ASP.NET.

有意思的是有些地方翻譯起來(lái)很憋嘴,但是卻知道作者在說(shuō)什么意思,所以干脆就直接拿自己的語(yǔ)言來(lái)表達作者的意思了。

另外最近由于項目的需要,正在研究從現有查詢(xún)系統的網(wǎng)站上抽取數據的方法,網(wǎng)上雖然能搜索到結果但是說(shuō)的都很粗略,也正好也趕上項目有需要所以有機會(huì )研究這方面東西。為什么要提取,我們也知道現在很多治安管理系統都是很老的,基本上都是1999年那時(shí)候做出來(lái)的,并且每個(gè)系統都是不同公司做的,所以打算根據這些查詢(xún)系統自己寫(xiě)一個(gè)提取查詢(xún)結果信息頁(yè)的方法,并且發(fā)布成Webservice來(lái)供其它類(lèi)型的軟件或設備訪(fǎng)問(wèn)。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
ASP.NET數據表現控件一些比較常見(jiàn)問(wèn)題集合
DataList分頁(yè)方法
理解GridView控件
gridview分頁(yè)模型
我的分頁(yè)方法
asp.net中對DataTable數據進(jìn)行排序、檢索、合并、分頁(yè)、統計
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久