zoh*_*air 35 c# asp.net webforms append drop-down-menu
我有一个DropDownList内部版本UpdatePanel,填充在回发中SqlDataSource.它有一个参数是另一个控件.我有时需要多个回发,但是每次更新面板刷新时都会发生这样的事情DropDownList.因此DropDownList最终会产生不正确的数据或重复的数据.
我将AppendDataBoundItems属性设置为,true因为我需要第一个项目为空白.
我怎样才能克服这个问题?还有另一种方法可以让第一个项目空白吗?
(这DropDownList是在asp.net-2.0网络应用程序中,代码隐藏在c#中)
谢谢.
Kel*_*tex 62
而不是使用AppendDataboundItems='true'(这将导致您正在讨论的问题),响应DataBound事件DropDownList,然后将"空白"项添加到列表的顶部.
<asp:DropDownList runat="server" ID="MyList"
ondatabound="MyListDataBound"></asp:DropDownList>
Run Code Online (Sandbox Code Playgroud)
然后在你的代码后面:
protected void MyListDataBound(object sender, EventArgs e)
{
MyList.Items.Insert(0, new ListItem("- Select -", ""));
}
Run Code Online (Sandbox Code Playgroud)
这里有很好的答案,但我认为有必要提供更多信息,因为有多个可行的选择,我们需要决定使用哪个。
首先,我们应该了解AppendDataBoundItems。如果将AppendDataBoundItems = "true",ListItems则添加到中,DropDownList而不清除旧的。否则,将DropDownList在next之前清除DataBind。MSDN AppendDataBoundItems文档
大多数答案基本上涵盖2个选项:
1.在html中定义一个空白选项,并将ListItems从数据库添加到DropDownList仅一次。
注意这里的三件事:
ListItem在HTML中定义空白AppendDataBoundItems="true"DataBind在回发或DropDownList项目计数> 1 时不调用资源:
<asp:DropDownList ID="MyList" runat="server" AppendDataBoundItems="true" DataValueField="Id" DataTextField="Name" >
<asp:ListItem Text="- Select One -" Value="" />
</asp:DropDownList>
Run Code Online (Sandbox Code Playgroud)
后面的代码:
protected void Page_Load(object sender, System.EventArgs e)
{
if (MyList.Items.Count <= 1 ) {
MyList.DataSource = MyDataSource;
MyList.DataBind();
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我喜欢检查计数与检查的逻辑IsPostBack。尽管PostBacks通常是重复数据绑定的原因,但也有可能以其他方式导致它。检查项目计数基本上只是检查是否已经加载。
或(改为使用的选项IsPostBack)
protected void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack) {
MyList.DataSource = MyDataSource;
MyList.DataBind();
}
}
Run Code Online (Sandbox Code Playgroud)
2.每次刷新页面时清除并重新加载DropDownList。
请注意与第一个选项的3个区别:
AppendDataBoundItems="false"(如果未定义,false则为默认值)ListItem在代码后面添加空白。我们无法在html中定义它,因为使用AppendDataBoundItems="false"会清除它。DataBind 被称为 Page_Load资源:
<asp:DropDownList ID="MyList" runat="server" DataValueField="Id" DataTextField="Name"
OnDataBound="MyList_DataBound" >
</asp:DropDownList>
Run Code Online (Sandbox Code Playgroud)
后面的代码:
protected void Page_Load(object sender, System.EventArgs e)
{
MyList.DataSource = MyDataSource;
MyList.DataBind();
}
protected void MyList_DataBound(object sender, EventArgs e)
{
MyList.Items.Insert(0, new ListItem("- Select One -", ""));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53065 次 |
| 最近记录: |