如何在 C# 中创建具有 3 个选项的动态复选框列表
how to create Dynamic check-box list with 3 options in C#
我需要创建从数据库动态填充的复选框列表。
我对使用单一选项创建它没有问题,但使用 3 - 有点让我困惑。
目前我有以下代码创建具有语言名称的单列复选框:
public void CreateCheckBox(DataSet DSDataForCheckBox, string pLangGrp)
{
CheckBoxList chkList = new CheckBoxList();
chkList.ID = "LanguageList";
chkList.AutoPostBack = true;
chkList.DataSource = DSDataForCheckBox;
chkList.DataTextField = "LangName";
chkList.DataValueField = "LangID";
chkList.DataBind();
Panel pLang = new Panel();
if (pLangGrp != "")
{
pLang.GroupingText = pLangGrp;
}
else
{
pLang.GroupingText = "Non Assigned Group";
}
pLang.Controls.Add(chkList);
this.Form.Controls.Add(pLang);
}
需要专家的帮助。
谢谢
PS:我们在 NET 3.5 上,所以 4.0 中的很多选项对我来说不可用。
您可以使用转发器控件或任何基于列表的控件来实现此目的。
这只是为了提供一些想法,您可以根据自己的要求进行研究。
ASPX
<asp:Repeater ID="Repeater1" runat="server" EnableViewState="False">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td class="RowStyle"><%# Eval("LangName") %></td>
<td>
<asp:CheckBoxList ID="chkListLangs" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Text="R" Value="R"></asp:ListItem>
<asp:ListItem Text="W" Value="W"></asp:ListItem>
<asp:ListItem Text="S" Value="S"></asp:ListItem>
</asp:CheckBoxList>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
后面的代码 以获取所选值:
protected void btnSubmitLangs_Click(object sender, EventArgs e)
{
foreach (RepeaterItem item in Repeater1.Items)
{
CheckBoxList chkListLanguages = (CheckBoxList)item.FindControl("chkListLangs");
List<ListItem> selectedLangs = chkListLanguages.Items.Cast<ListItem>()
.Where(listItem => listItem.Selected)
.ToList();
//Or you can use foreach loop also to get the selected items.
}
}
将一些测试数据分配给中继器的代码:
public void AssignLanguageListToRepeater()
{
List<Language> languages = new List<Language>
{
new Language{LangID="1", LangName="English"},
new Language{LangID="2", LangName="Spanish"}
};
Repeater1.DataSource = languages;
Repeater1.DataBind();
}
希望这对你有帮助...
我需要创建从数据库动态填充的复选框列表。 我对使用单一选项创建它没有问题,但使用 3 - 有点让我困惑。 目前我有以下代码创建具有语言名称的单列复选框:
public void CreateCheckBox(DataSet DSDataForCheckBox, string pLangGrp)
{
CheckBoxList chkList = new CheckBoxList();
chkList.ID = "LanguageList";
chkList.AutoPostBack = true;
chkList.DataSource = DSDataForCheckBox;
chkList.DataTextField = "LangName";
chkList.DataValueField = "LangID";
chkList.DataBind();
Panel pLang = new Panel();
if (pLangGrp != "")
{
pLang.GroupingText = pLangGrp;
}
else
{
pLang.GroupingText = "Non Assigned Group";
}
pLang.Controls.Add(chkList);
this.Form.Controls.Add(pLang);
}
需要专家的帮助。 谢谢
PS:我们在 NET 3.5 上,所以 4.0 中的很多选项对我来说不可用。
您可以使用转发器控件或任何基于列表的控件来实现此目的。
这只是为了提供一些想法,您可以根据自己的要求进行研究。
ASPX
<asp:Repeater ID="Repeater1" runat="server" EnableViewState="False">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td class="RowStyle"><%# Eval("LangName") %></td>
<td>
<asp:CheckBoxList ID="chkListLangs" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Text="R" Value="R"></asp:ListItem>
<asp:ListItem Text="W" Value="W"></asp:ListItem>
<asp:ListItem Text="S" Value="S"></asp:ListItem>
</asp:CheckBoxList>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
后面的代码 以获取所选值:
protected void btnSubmitLangs_Click(object sender, EventArgs e)
{
foreach (RepeaterItem item in Repeater1.Items)
{
CheckBoxList chkListLanguages = (CheckBoxList)item.FindControl("chkListLangs");
List<ListItem> selectedLangs = chkListLanguages.Items.Cast<ListItem>()
.Where(listItem => listItem.Selected)
.ToList();
//Or you can use foreach loop also to get the selected items.
}
}
将一些测试数据分配给中继器的代码:
public void AssignLanguageListToRepeater()
{
List<Language> languages = new List<Language>
{
new Language{LangID="1", LangName="English"},
new Language{LangID="2", LangName="Spanish"}
};
Repeater1.DataSource = languages;
Repeater1.DataBind();
}
希望这对你有帮助...