日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

DataGrid/DataList在ASP.NET中应用

發布時間:2025/3/13 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataGrid/DataList在ASP.NET中应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
DataGrid/DataList在ASP.NET中的重要性,想必就不用我再強調了,凡顯示Table類型的數據,大多會使用這兩個控件(當然,如果誰還像ASP那樣寫ASP.NET,那我也沒有辦法),所以,每個人可能都有自己的領悟,這篇文章,算是拋磚引玉,為大家做個鋪墊。

一、方法
1、DataBind
很簡單、最常用的方法。綁定數據用。需要注意的只有一點:執行了這個方法后,DataGrid(由于DataGrid和DataList極為相似,所以下面的介紹雖然是針對DataGrid,但與DataList也相差不遠)里面所有的顯示綁定數據的控件,都會顯示DataSource里的數據,其余控件也將初始化成.aspx里設計的狀態。


二、屬性
1、DataSource
有DataBind的地方,就應該有DataSource。如果沒有指定DataSource而執行DataBind,那DataGrid將什么也不會顯示。
DataSource一般是DataSet、DataTable或者DataView。當然也可以綁定DataReader或者其他實現IEnumerable的類。

2、DataKeyField,DataKeys
當你在DataGrid中定位一行之后,肯定想知道這行在數據表里的位置,至少有五種方法可以做到這一點,設置DataGrid的DataKeyField就是這幾種方法之一。
DataKeyField一般設置為數據表的Unique字段(否則就沒意義了),通過DataKey可以得到這一行對應的關鍵字段的值。
DataKeys是DataKey的集合,通過行的索引來讀取相應行的DataKey。

3、EditItemIndex,SelectedIndex,CurrentPageIndex,SelectedItem
這些屬性都很好理解,看名字就知道是什么意思,需要注意的是,設置了EditItemIndex或者CurrentPageIndex后需要重新執行DataBind方法(當然,前面提到過,還需要設置DataSource)。

4、Columns
沒什么好解釋的,Columns就是Columns,列的集合,可以設置列的屬性,包括Visible、HeaderText、FooterText、SortExpression等。
嚴重注意:自動生成的列,是不包含在Columns中的。只有在.aspx中顯示聲明的列和在代碼中添加的列才會被包含在其中。

5、Items
俗話說,最后的都是最重要的,把Items作為最后一個屬性來介紹,正式基于這樣的理由。
Items是DataGridItem的集合,可以遍歷當前DataGrid中顯示數據的DataGridItem。
5.1、DataGridItem
每一個DataGridItem就是DataGrid中顯示的一行,其中包括:
Header????????????DataGrid 控件的標題部分
Item????????????DataGrid 控件中的項
AlternatingItem????????DataGrid 控件中的交替項
SelectedItem??????????DataGrid 控件中的選定項(由SelectedIndex設置,通過SelectedItem屬性或者Items[SelectedIndex]來讀取)
EditItem??????????DataGrid 控件中處于編輯狀態的項(由EditItemIndex設置,通過Items[EditItemIndex]來讀取)
Separator??????????DataGrid 控件中項之間的分隔符
Footer??????????DataGrid 控件的腳注部分
Pager??????????????DataGrid 控件的頁選擇節
注意,DataGrid的Items屬性中不會包含Header、Footer、Pager這三類DataGridItem的。
5.1.1、DataGridItem的屬性
ItemIndex —— 得到行在Items中的索引
ItemType —— 返回行的類型,也就是上面列出的Header、Item、...、Pager
Cells —— 返回行包含的所有TableCell(不管是顯示聲明的,還是自動生成的,不管是可以看見的,還是隱藏掉的),通過TableCell,可以讀取Cell中顯示的文本、包含的控件
嚴重注意:只有BoundColumn列和自動生成列,才可以通過TableCell.Text屬性讀取顯示的文本。HyperLinkColumn、ButtonColumn、EditCommandColumn都需要將目標控件轉換成相應的控件。
比如:
假設DataGrid的第一列聲明如下
<asp:HyperLinkColumn DataTextField="au_id" HeaderText="au_id" DataNavigateUrlField="au_id" DataNavigateUrlFormatString="Edit.aspx?id={0}"></asp:HyperLinkColumn>
讀取的時候可以用:
//Items[0]表示第一行,Cells[0]表示第一列,Controls[0]表示Cell中的第一個控件(也只有這個控件可以用)
HyperLink link = (HyperLink)DataGrid1.Items[0].Cells[0].Controls[0]);
Response.Write(link.Text);
至于模板列(TemplateColumn),當然也可以通過DataGrid1.Items[i].Cells[j].Controls[n]來獲取,然后轉換成原來的控件類型再操作,但是還有個更好的辦法,就是用FindControl來查找控件。
FindControl是System.Web.UI.Control的方法,可以根據子控件ID來查找子控件
比如:
假設DataGrid的某一列聲明如下
<asp:TemplateColumn>
???<ItemTemplate>
??????<asp:TextBox Runat="server" ID="txtID" Text=''<%# DataBinder.Eval(Container.DataItem,"au_id") %>''>
??????</asp:TextBox>
???</ItemTemplate>
</asp:TemplateColumn>
讀取方法:
TextBox txt = (TextBox)DataGrid1.Items[1].FindControl("txtID");
Response.Write(txt.Text);
注意:DataList中是沒有Cell的


三、事件
1、ItemCommand、CancelCommand、DeleteCommand、EditCommand、UpdateCommand
也就是DataGrid中,點擊Button、LinkButton后執行的事件,執行的事件取決于按鈕的CommandName。其實最主要的一個是ItemCommand,而后面四個都只是ItemCommand的一小部分,
比如一個按鈕的CommandName為"Cancel",當返回后,首先執行的是ItemCommand事件,然后才是CancelCommand事件。

2、PageIndexChanged
如果你的DataGrid是分頁的,那當你在DataGrid上點擊Pager上的1、2、3或者<、>時,就會激發這個事件。
在這個事件里面,你可以用e.NewPageIndex來讀取要改變的頁,然后賦值給DataGrid的CurrentPageIndex屬性,最后不要忘了,還要設置DataSource,還要執行DataBind。
注意:DataList中沒有這個事件,如果需要在DataList中分頁,可以一段一段的讀取數據,然后把當前段的數據綁定到DataList上。

3、ItemDataBound,ItemCreated
首先要說的是這兩個事件的發生時間。
ItemDataBound嘛,只要執行了DataBind方法,就會馬上激發這個事件。
ItemCreated呢,如果頁面是第一次訪問(Page.IsPostBack = false),那在第一次執行DataBind的時候,會先激發ItemCreated事件,也就是說,執行了DataBind后,首先會用ItemCreated來建立Header行,然后用ItemDataBound來綁定Header行,再用ItemCreated來建立第一行,再調用ItemDataBound來綁定第一行,也就是說ItemCreated和ItemDataBound是交替執行的。
頁面返回時,也會執行ItemCreated事件,在Page_Load之前,但是這時候就不會再執行ItemDataBound事件了。
所以,如果你想在DataGrid里動態添加什么控件,就需要在ItemCreated事件中,而不是在ItemDataBound事件中。


四、代碼片斷
1、DataGrid顯示雙層表頭
假設你的DataGrid有三列,現在想將前兩列作為"大類1",第三列作為"大類2",現在,你可以在ItemDataBound事件中加入下面的代碼:
if (e.Item.ItemType == ListItemType.Header)
{
????e.Item.Cells[0].ColumnSpan = 2;
????e.Item.Cells[0].Text = "大類1</td><td>大類2</td></tr><tr><td>" + e.Item.Cells[0].Text;
}
用這個方法可以為任意添加新行。

2、設置綁定列或者自動生成列的編輯框寬度
請在你的ItemDataBound事件中加入一下代碼:
if (e.Item.ItemType == ListItemType.EditItem)
{
????for (int i = 0; i < e.Item.Cells.Count; i++)
????{
????????TextBox txt = (TextBox)e.Item.Cells[i].Controls[0];
????????txt.Width = Unit.Pixel(50);
????}
}

3、處理在DataGrid中的DropDownList的事件
DropDownList沒有CommandName屬性,所以不能用ItemCommand事件,不過你可以這樣試試:
在DataGrid的模板列中加入的DropDownList控件
<asp:DropDownList runat="server" id="ddl" AutoPostBack="True" OnSelectedIndexChanged="ddl_SelectedIndexChanged" />
然后你在.aspx.cs中加入一個函數
protected void ddl_SelectedIndexChanged(object sender, System.EventArgs e) //一定要聲明成protected或者public,不能是private的。
{
??//在這里就可以加入其他代碼
}

3.1、在上面的事件中怎樣得到本行其他Cell的值呢?
我們知道,DataGrid完全是一個Table結構的控件,DataGrid包含DataGridItem,每個DataGridItem又包含TableCell,那么,我們就可以在TableCell的某個控件中,利用控件的Parent來得到TableCell,再利用TableCell的Parent,就可以得到DataGridItem了。
protected void ddl_SelectedIndexChanged(object sender, System.EventArgs e) //一定要聲明成protected或者public,不能是private的。
{
??DropDownList ddl = (DropDownList)sender;
??TableCell cell = (TableCell)ddl.Parent;
??DataGridItem item = (DataGridItem)cell.Parent;
??Response.Write(item.Cells[0].Text);
}

4、怎樣得到Header、Footer、Pager里的控件
方法一:在ItemCreated或者ItemDataBound中,具體代碼就不在多寫了
方法二:遍歷DataGrid的所有Item(注意,不是遍歷DataGrid1.Items下的Item)
foreach (DataGridItem item in DataGrid1.Controls[0].Controls)
{
??if (item.ItemType == ListItemType.Header)
??{
????//用item.FindControl查找相應的控件
??}
}
大家可能會注意到,這里有個DataGrid1.Controls[0].Controls,這表示,DataGrid1下,有一個子控件,這個子控件是DataGridTable類型,他下面才是DataGridItem集合
在DataList中,下面的子控件直接就是DataListItem了,而沒有Table:
foreach (DataListItem item in DataList1.Controls)
{
??//....
}

轉載于:https://www.cnblogs.com/lrary/archive/2006/01/08/313140.html

總結

以上是生活随笔為你收集整理的DataGrid/DataList在ASP.NET中应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 好男人www日本 | 天天操操夜夜操操 | 国产精品无码久久久久久电影 | 国产激情文学 | 亚洲欧美韩日 | 天天躁日日躁狠狠躁av麻豆男男 | 日韩欧美国产另类 | 久久精品欧美一区二区三区麻豆 | 超碰免费在线播放 | 丰满熟妇人妻av无码区 | 夫の上司に犯波多野结衣853 | 先锋av资源 | 黄色一级片在线播放 | 超碰人人干人人 | 亚洲成人av免费观看 | 伊人首页 | 色欲av永久无码精品无码蜜桃 | 97av.com| 91日韩中文字幕 | 2018天天干天天操 | 天天视频天天爽 | 婷婷激情小说 | 超碰在线亚洲 | 黄色草逼网站 | 国产精品黄色大片 | 色综合天天综合综合国产 | 日本裸体xx少妇18在线 | 国产一级视频 | 成人国产精品免费观看动漫 | 国产午夜成人久久无码一区二区 | 欧美成人精品一区二区三区 | 无码一区二区精品 | 成人一级视频 | av资源在线播放 | 牛牛电影国产一区二区 | av片在线免费看 | 婷婷色影院 | 大肉大捧一进一出好爽视频 | 青草超碰 | 欧美日韩电影一区二区三区 | 久久99精品国产麻豆91樱花 | 久久久久性| 一区二区亚洲 | 精品一区二区三区欧美 | 高潮一区二区三区 | 一区二区三区四区人妻 | www.色图 | 青草草在线 | 波多野结衣视频免费观看 | 日本草草视频 | 欧美高潮视频 | 国产二区av | 国产三级午夜理伦三级 | 日日狠狠久久偷偷四色综合免费 | 奇米四色网| 亚洲顶级毛片 | 国产精品 欧美精品 | 久久精精品久久久久噜噜 | 91免费国产视频 | 少妇综合 | 欧美性猛交xxxx乱大交3 | 高h全肉污文play带道具 | 日本一区二区不卡在线观看 | 日本熟女毛茸茸 | 懂色av中文一区二区三区天美 | 麻豆高清| 成人在线观看视频网站 | 欧美性猛交ⅹ乱大交3 | 五月婷婷社区 | 色小姐av| heyzo北岛玲在线播放 | 少妇av在线| 午夜免费网 | 韩漫动漫免费大全在线观看 | 成人网址在线观看 | 日美女逼逼 | 欧美日韩亚洲激情 | 乳揉みま痴汉4在线播放 | 最新色站 | 日韩一二三四区 | 国产精品一级无码 | 欧美日韩国产91 | 日批在线视频 | 91porny丨首页入口在线 | 99在线免费 | 成人午夜在线 | 日本一区二区精品 | 亚洲爆乳无码精品aaa片蜜桃 | 亚洲熟妇av日韩熟妇在线 | 亚洲日本一区二区 | 欧美18av | 玖玖在线观看 | 国产裸体美女永久免费无遮挡 | 男女被到爽流尿 | 91网站在线看 | 中文字幕第十一页 | 在线观看免费人成视频 | 那里有毛片看 | 日本三级吃奶头添泬无码苍井空 |