自定函数获取datagrid,datalist,rpeater控件中header,footer栏中控件
生活随笔
收集整理的這篇文章主要介紹了
自定函数获取datagrid,datalist,rpeater控件中header,footer栏中控件
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在論壇上看到很多關(guān)于datagrid,gridview,datalist,rpeater提取header,footer中控件的問題,整理了一下.供大家分享
下面我以DataGrid為便進(jìn)行說明.
footer欄又稱頁腳欄,在很多時(shí)候我們可以在該欄放頁碼及相當(dāng)?shù)墓δ苕I.但是最后在獲得這些控件引用的時(shí)候就會(huì)有點(diǎn)麻煩,由于footer(頁腳),header(頁眉)都不在DataGrid.Items屬性中,該屬性返回的集合只包含數(shù)據(jù)綁定生成的item,所以必須用其他方法來做.下面是我從csdn和其他地方總結(jié)而來的幾種方法:
1.在ItemCreated或者ItemDataBound中對其控件進(jìn)行查找;
if?(e.Item.ItemType?==?ListItemType.Footer)
{
?
} 2.遍歷DataGrid中的所有Item.DataGrid.Controls[0]一般來說為生成的Table.
foreach?(DataGridItem?item?in?myGrid.Controls[0].Controls)
?????????{
?????????????if(item.ItemType==ListItemType.Footer)
??????????{
????????????????????????? //用Item.FindControl查找相應(yīng)的控件
??????????????????????????????}
?????????}
????Inherits="SearchHeaderAndFooterControl"?%>
<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html?xmlns="http://www.w3.org/1999/xhtml">
<head?runat="server">
????<title>F</title>
</head>
<body>
????<form?id="form1"?runat="server">
????<div>
????????<asp:DataGrid?runat="server"?ID="gvUserView"?DataSourceID="ldsUserData"?ShowFooter="True"
????????????AllowCustomPaging="True"?AllowPaging="True"?
????????????onitemdatabound="gvUserView_ItemDataBound">
????????????<Columns>
????????????????<asp:TemplateColumn>
????????????????????<HeaderTemplate>
????????????????????????<asp:TextBox?runat="server"?ID="txtHeaderInfo"?Text="this?is?header?textbox?value!"></asp:TextBox>
????????????????????</HeaderTemplate>
????????????????</asp:TemplateColumn>
????????????????<asp:TemplateColumn>
????????????????????<FooterTemplate>
????????????????????????<asp:TextBox?runat="server"?ID="txtFooterInfo"?Text="this?is?footer?textbox?value!"></asp:TextBox>
????????????????????</FooterTemplate>
????????????????</asp:TemplateColumn>
????????????</Columns>
????????</asp:DataGrid>
????????<asp:LinqDataSource?ID="ldsUserData"?runat="server"?ContextTypeName="DataClassesDataContext"
????????????TableName="Customers">
????????</asp:LinqDataSource>
????????<br?/>
????????<asp:Button?ID="btnGetFooterControlValue"?runat="server"?Text="獲取footer控件"?OnClick="btnGetFooterControlValue_Click"?/>
????????<asp:Button?ID="btnGetHeaderControlValue"?runat="server"
????????????Text="獲取header控件"?onclick="btnGetHeaderControlValue_Click"?/>
????</div>
????</form>
</body>
</html>
using?System.Collections;
using?System.Configuration;
using?System.Data;
using?System.Linq;
using?System.Web;
using?System.Web.Security;
using?System.Web.UI;
using?System.Web.UI.HtmlControls;
using?System.Web.UI.WebControls;
using?System.Web.UI.WebControls.WebParts;
using?System.Xml.Linq;
public?partial?class?SearchHeaderAndFooterControl?:?System.Web.UI.Page
{
????protected?void?Page_Load(object?sender,?EventArgs?e)
????{
????}
????protected?void?btnGetFooterControlValue_Click(object?sender,?EventArgs?e)
????{
????????#region?方法1
????????//foreach?(DataGridItem?item?in?gvUserView.Controls[0].Controls)
????????//{
????????//????if?(item.ItemType?==?ListItemType.Footer)
????????//????{
????????//????????TextBox?txtFooter?=?item.FindControl("txtFooterInfo")?as?TextBox;
????????//????????ShowMessage(txtFooter.Text);
????????//????????break;
????????//????}
????????//}
????????#endregion
????????#region?方法2
????????//Table?clientTable?=?gvUserView.Controls[0]?as?Table;
????????//DataGridItem?item?=?(DataGridItem)clientTable.Rows[clientTable.Rows.Count?-?2];
????????//TextBox?txtFooter?=?item.FindControl("txtFooterInfo")?as?TextBox;
????????//ShowMessage(txtFooter.Text);
????????#endregion
????????
????}
????private?void?ShowMessage(string?str)
????{
????????string?notifyInfo?=?string.Format("alert('{0}');",?str);
????????Page.ClientScript.RegisterClientScriptBlock(GetType(),?"",?notifyInfo,?true);
????}
????protected?void?btnGetHeaderControlValue_Click(object?sender,?EventArgs?e)
????{
????????foreach?(DataGridItem?item?in?gvUserView.Controls[0].Controls)
????????{
????????????if?(item.ItemType?==?ListItemType.Header)
????????????{
????????????????TextBox?txtHeader?=?item.FindControl("txtHeaderInfo")?as?TextBox;
????????????????ShowMessage(txtHeader.Text);
????????????????break;
????????????}
????????}
????}
????protected?void?gvUserView_ItemDataBound(object?sender,?DataGridItemEventArgs?e)
????{
????????if?(e.Item.ItemType?==?ListItemType.Header)
????????{
????????????TextBox?txtHeader?=?e.Item.FindControl("txtHeaderInfo")?as?TextBox;
????????????ShowMessage(txtHeader.Text);
????????}
????????//if?(e.Item.ItemType?==?ListItemType.Footer)
????????//{
????????//????TextBox?txtFooter?=?e.Item.FindControl("txtFooterInfo")?as?TextBox;
????????//????ShowMessage(txtFooter.Text);
????????//}
????}
}
????????{
????????????TextBox?txtHeader?=?e.Row.FindControl("txtHeaderInfo")?as?TextBox;
????????????ShowMessage(txtHeader.Text);
????????}
????????//if?(e.Row.RowType?==?DataControlRowType.Footer)
????????//{
????????//????TextBox?txtFooter?=?e.Item.FindControl("txtFooterInfo")?as?TextBox;
????????//????ShowMessage(txtFooter.Text);
????????//}
????????//{
????????//}
????????if?(e.Item.ItemType?==?ListItemType.Footer)
????????{
????????????TextBox?txtFooter?=?e.Item.FindControl("txtFooterInfo")?as?TextBox;
????????????//TextBox?txtFooter?=?e.Item.Controls[1]?as?TextBox;
????????????ShowMessage(txtFooter.Text);
????????}
下面我以DataGrid為便進(jìn)行說明.
footer欄又稱頁腳欄,在很多時(shí)候我們可以在該欄放頁碼及相當(dāng)?shù)墓δ苕I.但是最后在獲得這些控件引用的時(shí)候就會(huì)有點(diǎn)麻煩,由于footer(頁腳),header(頁眉)都不在DataGrid.Items屬性中,該屬性返回的集合只包含數(shù)據(jù)綁定生成的item,所以必須用其他方法來做.下面是我從csdn和其他地方總結(jié)而來的幾種方法:
1.在ItemCreated或者ItemDataBound中對其控件進(jìn)行查找;
if?(e.Item.ItemType?==?ListItemType.Footer)
{
?
} 2.遍歷DataGrid中的所有Item.DataGrid.Controls[0]一般來說為生成的Table.
foreach?(DataGridItem?item?in?myGrid.Controls[0].Controls)
?????????{
?????????????if(item.ItemType==ListItemType.Footer)
??????????{
????????????????????????? //用Item.FindControl查找相應(yīng)的控件
??????????????????????????????}
?????????}
前面兩種方法大家都經(jīng)常用,這里再列出以前在csdn上看到的思?xì)w大哥提出的另外兩種方法。
3.Table t=(Table)DataGrid.Controls[0];
//如果你有Pager的話,那么你需要這樣編碼T.Rows[T.Rows.Count-2]去獲得Pager
DataGridItem item=(DataGridItem)t.Rows[t.Rows.Count-1];
//該item就是Footer,此時(shí)你就可以用FindControl查找了。
下面為一個(gè)完整的demo
前臺(tái)頁;
<%@?Page?Language="C#"?AutoEventWireup="true"?CodeFile="SearchHeaderAndFooterControl.aspx.cs"????Inherits="SearchHeaderAndFooterControl"?%>
<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html?xmlns="http://www.w3.org/1999/xhtml">
<head?runat="server">
????<title>F</title>
</head>
<body>
????<form?id="form1"?runat="server">
????<div>
????????<asp:DataGrid?runat="server"?ID="gvUserView"?DataSourceID="ldsUserData"?ShowFooter="True"
????????????AllowCustomPaging="True"?AllowPaging="True"?
????????????onitemdatabound="gvUserView_ItemDataBound">
????????????<Columns>
????????????????<asp:TemplateColumn>
????????????????????<HeaderTemplate>
????????????????????????<asp:TextBox?runat="server"?ID="txtHeaderInfo"?Text="this?is?header?textbox?value!"></asp:TextBox>
????????????????????</HeaderTemplate>
????????????????</asp:TemplateColumn>
????????????????<asp:TemplateColumn>
????????????????????<FooterTemplate>
????????????????????????<asp:TextBox?runat="server"?ID="txtFooterInfo"?Text="this?is?footer?textbox?value!"></asp:TextBox>
????????????????????</FooterTemplate>
????????????????</asp:TemplateColumn>
????????????</Columns>
????????</asp:DataGrid>
????????<asp:LinqDataSource?ID="ldsUserData"?runat="server"?ContextTypeName="DataClassesDataContext"
????????????TableName="Customers">
????????</asp:LinqDataSource>
????????<br?/>
????????<asp:Button?ID="btnGetFooterControlValue"?runat="server"?Text="獲取footer控件"?OnClick="btnGetFooterControlValue_Click"?/>
????????<asp:Button?ID="btnGetHeaderControlValue"?runat="server"
????????????Text="獲取header控件"?onclick="btnGetHeaderControlValue_Click"?/>
????</div>
????</form>
</body>
</html>
后臺(tái)頁;
?
using?System;using?System.Collections;
using?System.Configuration;
using?System.Data;
using?System.Linq;
using?System.Web;
using?System.Web.Security;
using?System.Web.UI;
using?System.Web.UI.HtmlControls;
using?System.Web.UI.WebControls;
using?System.Web.UI.WebControls.WebParts;
using?System.Xml.Linq;
public?partial?class?SearchHeaderAndFooterControl?:?System.Web.UI.Page
{
????protected?void?Page_Load(object?sender,?EventArgs?e)
????{
????}
????protected?void?btnGetFooterControlValue_Click(object?sender,?EventArgs?e)
????{
????????#region?方法1
????????//foreach?(DataGridItem?item?in?gvUserView.Controls[0].Controls)
????????//{
????????//????if?(item.ItemType?==?ListItemType.Footer)
????????//????{
????????//????????TextBox?txtFooter?=?item.FindControl("txtFooterInfo")?as?TextBox;
????????//????????ShowMessage(txtFooter.Text);
????????//????????break;
????????//????}
????????//}
????????#endregion
????????#region?方法2
????????//Table?clientTable?=?gvUserView.Controls[0]?as?Table;
????????//DataGridItem?item?=?(DataGridItem)clientTable.Rows[clientTable.Rows.Count?-?2];
????????//TextBox?txtFooter?=?item.FindControl("txtFooterInfo")?as?TextBox;
????????//ShowMessage(txtFooter.Text);
????????#endregion
????????
????}
????private?void?ShowMessage(string?str)
????{
????????string?notifyInfo?=?string.Format("alert('{0}');",?str);
????????Page.ClientScript.RegisterClientScriptBlock(GetType(),?"",?notifyInfo,?true);
????}
????protected?void?btnGetHeaderControlValue_Click(object?sender,?EventArgs?e)
????{
????????foreach?(DataGridItem?item?in?gvUserView.Controls[0].Controls)
????????{
????????????if?(item.ItemType?==?ListItemType.Header)
????????????{
????????????????TextBox?txtHeader?=?item.FindControl("txtHeaderInfo")?as?TextBox;
????????????????ShowMessage(txtHeader.Text);
????????????????break;
????????????}
????????}
????}
????protected?void?gvUserView_ItemDataBound(object?sender,?DataGridItemEventArgs?e)
????{
????????if?(e.Item.ItemType?==?ListItemType.Header)
????????{
????????????TextBox?txtHeader?=?e.Item.FindControl("txtHeaderInfo")?as?TextBox;
????????????ShowMessage(txtHeader.Text);
????????}
????????//if?(e.Item.ItemType?==?ListItemType.Footer)
????????//{
????????//????TextBox?txtFooter?=?e.Item.FindControl("txtFooterInfo")?as?TextBox;
????????//????ShowMessage(txtFooter.Text);
????????//}
????}
}
?
如果控件為GridView,則進(jìn)行簡單變換即可使用
?
if?(e.Row.RowType?==?DataControlRowType.Header)????????{
????????????TextBox?txtHeader?=?e.Row.FindControl("txtHeaderInfo")?as?TextBox;
????????????ShowMessage(txtHeader.Text);
????????}
????????//if?(e.Row.RowType?==?DataControlRowType.Footer)
????????//{
????????//????TextBox?txtFooter?=?e.Item.FindControl("txtFooterInfo")?as?TextBox;
????????//????ShowMessage(txtFooter.Text);
????????//}
DataList,Repeater也是同理
????????//{
????????//}
????????if?(e.Item.ItemType?==?ListItemType.Footer)
????????{
????????????TextBox?txtFooter?=?e.Item.FindControl("txtFooterInfo")?as?TextBox;
????????????//TextBox?txtFooter?=?e.Item.Controls[1]?as?TextBox;
????????????ShowMessage(txtFooter.Text);
????????}
?
轉(zhuǎn)載于:https://www.cnblogs.com/symbol441/archive/2007/12/04/981962.html
總結(jié)
以上是生活随笔為你收集整理的自定函数获取datagrid,datalist,rpeater控件中header,footer栏中控件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 烧烤炉子多少钱啊?
- 下一篇: 现在版本红眼和修罗哪个好玩点?