首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

·简单有关问题,为什么获取不到控件实例

2012-01-08 
简单问题,为什么获取不到控件实例?usingSystemusingSystem.DatausingSystem.ConfigurationusingSystem.

·简单问题,为什么获取不到控件实例?
using   System;
using   System.Data;
using   System.Configuration;
using   System.Collections;
using   System.Web;
using   System.Web.Security;
using   System.Web.UI;
using   System.Web.UI.WebControls;
using   System.Web.UI.WebControls.WebParts;
using   System.Web.UI.HtmlControls;

using   System.Data.SqlClient;

public   partial   class   Repeater0   :   System.Web.UI.Page
{
        protected   void   Page_Load(object   sender,   EventArgs   e)
        {                
                Repeater1.DataSource   =   pageDs();
                Repeater1.DataBind();
                //------(为什么找不到DropDownList1这个控件?)
                DropDownList   DDl   =   (DropDownList)Repeater1.FindControl( "DropDownList1 ");
                string   n   =   DDl.DataValueField.ToString();
                //------
        }
        protected   PagedDataSource   pageDs()
        {
                string   constr   =   ConfigurationManager.ConnectionStrings[ "NorthwindConnectionString "].ConnectionString;
                SqlConnection   sqlCon   =   new   SqlConnection(constr);
                DataSet   Ds   =   new   DataSet();

                SqlDataAdapter   sqlDa1   =   new   SqlDataAdapter( "select   *   from   Orders ",   sqlCon);
                sqlDa1.Fill(Ds,   "01 ");

                SqlDataAdapter   sqlDa2   =   new   SqlDataAdapter( "select   *   from   [Order   Details] ",   sqlCon);
                sqlDa2.Fill(Ds,   "02 ");

                Ds.Relations.Add( "All ",   Ds.Tables[ "01 "].Columns[ "OrderID "],   Ds.Tables[ "02 "].Columns[ "OrderID "]);

                PagedDataSource   pageDs   =   new   PagedDataSource();
                pageDs.DataSource   =   Ds.Tables[ "01 "].DefaultView;
                pageDs.AllowPaging   =   true;
                pageDs.PageSize   =   16;
                pageDs.CurrentPageIndex   =   Convert.ToInt32(Request.QueryString[ "page "]);
                return   pageDs;
        }
        protected   void   Repeater1_ItemDataBound(object   sender,   RepeaterItemEventArgs   e)
        {


                if   (e.Item.ItemType   ==   ListItemType.Footer)
                {
                        int   Cp   =   pageDs().PageCount;
                        int   Ip   =   pageDs().CurrentPageIndex;
                        //------
                        DropDownList   ddl   =   (DropDownList)e.Item.FindControl( "DropDownList1 ");
                        ddl.AutoPostBack   =   true;
                        for   (int   i   =   0;   i   <   Cp;   i++)//(在这里添加Text/value)
                        {
                                ddl.Items.Add(new   ListItem(Convert.ToInt32(i   +   1).ToString(),   i.ToString()));
                        }
                        //------
                        Label   Cpage   =   (Label)e.Item.FindControl( "Cpage ");
                        Cpage.Text   =   Cp.ToString();

                        Label   Ipage   =   (Label)e.Item.FindControl( "Ipage ");
                        Ipage.Text   =   Convert.ToString(Ip   +   1);//(pageDs().CurrentPageIndex   +   1)

                        HyperLink   Tp   =   (HyperLink)e.Item.FindControl( "Tp ");
                        Tp.NavigateUrl   =   "?page=0 ";//首页

                        HyperLink   Sn   =   (HyperLink)e.Item.FindControl( "Sn ");
                        Sn.NavigateUrl   =   "?page= "   +   Convert.ToInt32(Cp   -   1);//末页

                        HyperLink   Up   =   (HyperLink)e.Item.FindControl( "Up ");
                        HyperLink   Dn   =   (HyperLink)e.Item.FindControl( "Dn ");

                        if   (Ip   <=   0)
                        {
                                Tp.Enabled   =   false;//首页,关闭
                                Up.Enabled   =   false;//上页,关闭


                                Dn.Enabled   =   true;//下页,开启
                        }
                        else
                        {
                                Up.NavigateUrl   =   "?page= "   +   Convert.ToInt32(Ip   -   1);
                        }

                        if   (Ip   > =   Cp-1)
                        {
                                Sn.Enabled   =   false;//末页,关闭
                                Dn.Enabled   =   false;//下页,关闭
                                Up.Enabled   =   true;//上页,开启
                        }
                        else
                        {
                                Dn.NavigateUrl   =   "?page= "   +   Convert.ToInt32(Ip   +   1);
                        }
                }
        }
}


[解决办法]
DropDownList1如果是动态生成就不行了。
[解决办法]
DropDownList DDl = (DropDownList)Repeater1.Items[i].FindControl( "DropDownList1 ");
i指定在哪行中进行FindControl,如第一行
DropDownList DDl = (DropDownList)Repeater1.Items[0].FindControl( "DropDownList1 ");
[解决办法]
Repeater1.FindControl( "DropDownList1 ")

显然是错误的。{Control}.FindControl并不是随便去寻找某个控件,它遇到一个实现了 INamingContainer接口的控件就停止了。也就是说,即使Repeater只有一行,它也不会深入到Item内部去寻找控件。必须从Item开始寻找,而不是从Repeater开始寻找。

热点排行