C# 如何在C中创建带有3个选项的动态复选框列表#

C# 如何在C中创建带有3个选项的动态复选框列表#,c#,checkbox,.net-3.5,C#,Checkbox,.net 3.5,我需要创建从数据库动态填充的复选框列表。 我没有问题,创造这个单一的选择,但与3种困惑我。 目前,我有以下代码,用于创建带有语言名称的单列复选框: public void CreateCheckBox(DataSet DSDataForCheckBox, string pLangGrp) { CheckBoxList chkList = new CheckBoxList(); chkList.ID = "LanguageList"; chkList.AutoPostBac

我需要创建从数据库动态填充的复选框列表。 我没有问题,创造这个单一的选择,但与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:我们使用的是NET3.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.
    }

}
protectedvoid btnSubmitLangs\u单击(对象发送方,事件参数e)
{
foreach(Repeater1.Items中的RepeaterItem项)
{
checkboxlistlanguages=(CheckBoxList)item.FindControl(“chkListLangs”);
列出selectedLangs=chkListLanguages.Items.Cast()
.Where(listItem=>listItem.Selected)
.ToList();
//或者也可以使用foreach循环来获取所选项目。
}
}
将某些测试数据分配给中继器的代码:

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();
}
public void AssignLanguageListToRepeater()
{
列表语言=新列表
{
新语言{LangID=“1”,LangName=“English”},
新语言{LangID=“2”,LangName=“西班牙语”}
};
Repeater1.DataSource=语言;
Repeater1.DataBind();
}

希望这能帮助您……

您必须创建自己的控件。没有.Net控件可以提供开箱即用的功能,或者您可以使用3个列表框并将它们放在一起。我推荐第一个选项:-)您使用的是winforms还是web应用程序?谢谢您的建议。这不完全是我的想法,但它会的。我将在TemplateField中将网格与aspx复选框一起使用。通过我,checkboxlist:RepeatColumns的这个属性是不正确的。我从来没有看到它在使用中,并认为它可能适合我的需要。