在DataGrid模板列中我放了一个继承自DropDwonList自定义控件,这个控件有一个公共ID属性,通过这个ID来获取DropDwonList要显示的数据。代码是这样的:.aspx是这样的
<asp:TemplateColumn HeaderText="所属栏目">
<ItemTemplate>
<cc1:NewsCategory id="NewsCategory1" NewsID ='<%# DataBinder.Eval(Container.DataItem,"f_NewsID")%>' runat="server">
</cc1:NewsCategory>
</ItemTemplate>
</asp:TemplateColumn>控件代码:
[
ParseChildren(true)
]
public class NewsCategory : DropDownList
{
private int newsID; public NewsCategory()
{
this.AutoPostBack = true;
LangCheng.CommonModules.NewsManagerBusiness.News news = new News();
DataSet ds;
ds = news.GetCategoryByNewsID(newsID);
this.DataSource = ds;
this.DataTextField = "f_Name";
this.DataValueField = "f_CategoryID";
this.DataBind();
} public int NewsID
{
set { newsID = value ;}
}
}问题是
newsID在这里set { newsID = value ;} 已经传入,但却无法输给newsID 
所以ds = news.GetCategoryByNewsID(newsID);的newsID始中为“0”,
在页面中也显示不出来!如果我这样ds = news.GetCategoryByNewsID(10);
则页面中的DropDwonList可以正常显示为什么在set { newsID = value ;} 中value的值不能输给newsID呢??
请求高人指点
谢谢!

解决方案 »

  1.   

    你是在构造函数中取newsID这个值的,这时候才开始创建NewsCategory这个对象,它的属性还没初始化,当然取不到newsID这个值,你应该把newsID做为构造函数的参数传递进去,象这样:public NewsCategory(int newsID)
    {
                        this.newsID=newsID;
    this.AutoPostBack = true;
    LangCheng.CommonModules.NewsManagerBusiness.News news = new News();
    DataSet ds;
    ds = news.GetCategoryByNewsID(newsID);
    this.DataSource = ds;
    this.DataTextField = "f_Name";
    this.DataValueField = "f_CategoryID";
    this.DataBind();
    }
    上面那个this.newsID=newsID其它也没什么用,因为你没有获取这个字段值的属性,所以去掉也可以
      

  2.   

    webdiyer(陕北吴旗娃) 构造器中如果有参数在<cc1:NewsCategory id="NewsCategory1" NewsID ='<%# DataBinder.Eval(Container.DataItem,"f_NewsID")%>' runat="server">怎么传啊??????
      

  3.   

    看不懂!没见过这么写服务器控件的,哈哈,看来你是断章取义,还没有学明白服务器控件是什么东西,就开始创造它了!!呵呵
    3颗星也不过如此...
    想当年..咳~~
    张狂了些,Sorry,Sorry...
    最差你写个OnInit的override函数,也比写在构造函数中强啊
    另外啊,如果你不想每次刷新页面都要对你这个控件联系赋值的话,建议你写成这样
    public int NewsID
    {
    set { ViewState["NewsID"] = value ;}
                                get{ if(ViewState["NewsID"]!=null)
                                     return (int)ViewState["NewsID"];
                                     return 0;                              
                                    }
    }
      

  4.   

    http://www.csharpproject.com
    先注册吧!2个月后新版应该能出来了:(
    最近真的很忙...
      

  5.   

    chestnuts(c# Sharp) 这个孩子被宠坏了!
      

  6.   

    惭愧,chestnuts(c# Sharp)说得没错,当初看这个问题也没多考虑是自定义控件,看出楼主的问题所在就直接当成普通的类处理了,可惜我不是大版主,没权加分,否则应该给chestnuts(c# Sharp)升到四颗星:)