【发布时间】:2021-10-15 22:55:33
【问题描述】:
我的列表框选择了正确的值,但它分隔了每个列表框的值,而不是在一个列表框中插入所有值。
为什么会发生这种行为?
代码背后
protected void GvInBlocks_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
List<string> list = new List<string>();
//Find listBoxCourse in GvChildBlock
ListBox listBoxCourse = e.Row.FindControl("listBoxCourse") as ListBox;
getCourseLB(listBoxCourse);
//Fill control
string CourseNames = (e.Row.FindControl("lblChildBlockCourse") as Label).Text;
list.Add(CourseNames);
foreach(ListItem items in listBoxCourse.Items)
{
if(list.Contains(items.Value))
{
items.Selected = true;
}
}
}
}
标记语言
<asp:Panel ID="pnlInBlocks" runat="server" Style="display: none">
<asp:GridView ID="GvInBlocks" runat="server" AutoGenerateColumns="false" CssClass="list" OnRowDataBound="GvInBlocks_RowDataBound">
<Columns>
<asp:TemplateField HeaderText = "Curso">
<ItemTemplate>
<asp:Label ID="lblChildBlockCourse" runat="server" Text='<%# Eval("CourseID") %>' Visible = "false" />
<asp:ListBox ID="listBoxCourse" runat="server" SelectionMode="Multiple">
</asp:ListBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel>
编辑:
我编辑了代码,并用逗号分隔了值,但结果保持不变,是因为 RowDataBound 吗?如果数据库返回 2 行,它会返回 2 个列表框吗? 代码编辑:
//Find listBoxCourse in GvChildBlock
ListBox listBoxCourse = e.Row.FindControl("listBoxCourse") as ListBox;
getCourseLB(listBoxCourse);
//Fill control
string CourseNames = (e.Row.FindControl("lblChildBlockCourse") as Label).Text;
string[] arrayNames = CourseNames.Split(',');
foreach(var names in arrayNames)
{
listBoxCourse.Items.FindByValue(names).Selected = true;
}
【问题讨论】:
-
string CourseNames = (e.Row.FindControl("lblChildBlockCourse") as Label).Text; FindControl 看起来它正在返回您转换为字符串的多个项目,因此它正在创建字符串,每个返回的项目用逗号分隔。
-
您必须将项目分开。查看 FindControl 返回的内容,您应该能够对它们执行 foreach 循环。自己做的时间不够。如果到时候其他人还没有回答,我可能稍后再看。
-
该标签中的值/文本是如何分隔的?
-
现在我检查了,标签内的值没有用任何逗号左右分隔
-
@OldDog 检查我在上面这篇文章中所做的编辑。