C# 在设置usercontrol的值之前填充其下拉列表
我有一个名为ucTZones的用户控件 下面是usercontrol的代码C# 在设置usercontrol的值之前填充其下拉列表,c#,asp.net,user-controls,C#,Asp.net,User Controls,我有一个名为ucTZones的用户控件 下面是usercontrol的代码 public partial class ucTZones : UserControl{ /// <summary> /// Accessor for the time zone drop-down. /// </summary> public int ddlProp { get
public partial class ucTZones : UserControl{
/// <summary>
/// Accessor for the time zone drop-down.
/// </summary>
public int ddlProp
{
get
{
try
{
return Int32.Parse(ddl.SelectedValue);
}
catch
{
return 1;
}
}
set
{
try
{
this.ddl.SelectedValue = value.ToString();
}
catch
{
this.ddl.SelectedValue = "0";
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
if(!ispostback)
BindDropDown();
}
private void BindDropDown()
{
ddl.datasource =somelist;
ddl.DataBind();
}
}
现在我的问题是如何在执行之前填充usercontrol的ddl
页面的下一行\u加载TZonePage
this.ucTZones.ddlProp=15;
你可以检查一下,我没有测试过
public partial class ucTZones : UserControl{
/// <summary>
/// Accessor for the time zone drop-down.
/// </summary>
public int ddlProp
{
get
{
// your variable to get the value
}
set
{
// your variable to assign
}
}
protected void Page_Load(object sender, EventArgs e)
{
if(!ispostback)
BindDropDown();
}
private void BindDropDown()
{
ddl.datasource =somelist;
ddl.DataBind();
ddl.SelectedValue = ddlProp;
}
}
public部分类:UserControl{
///
///时区下拉列表的访问器。
///
公共int ddlProp
{
得到
{
//您的变量以获取值
}
设置
{
//要分配的变量
}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!ispostback)
BindDropDown();
}
私有void绑定下拉列表()
{
ddl.datasource=somelist;
ddl.DataBind();
ddl.SelectedValue=ddlProp;
}
}
由于您注意到的原因,通常不应在用户控件中使用页面加载
(或其他页面方法)。相反,您应该在触发逻辑的UC中使用方法或属性。在这种情况下,如果数据源已加载,也可以检入属性:
public int ddlProp
{
get
{
if(ddl.SelectedIndex == -1)
return -1;
return int.Parse(ddl.SelectedValue);
}
set
{
if(ddl.datasource== null)
BindDropDown();
if(ddl.Items.FindByValue(value.ToString()) != null)
this.ddl.SelectedValue = value.ToString();
else
this.ddl.SelectedValue = "0";
}
}
为什么不为DropDownList
的数据源提供一个属性呢?然后控制器(页面)负责正确的顺序,它也更易于重用。谢谢Tim。让我实施并检查这是我在问题中提到的。它的解决方案在哪里?请检查BindDropDown()
函数
public int ddlProp
{
get
{
if(ddl.SelectedIndex == -1)
return -1;
return int.Parse(ddl.SelectedValue);
}
set
{
if(ddl.datasource== null)
BindDropDown();
if(ddl.Items.FindByValue(value.ToString()) != null)
this.ddl.SelectedValue = value.ToString();
else
this.ddl.SelectedValue = "0";
}
}