一个复选框列表包含多列数据

问题描述 投票:0回答:1

我需要一个复选框列表来显示两个字段的数据。例如。产品 A 提供款式 1 或 2,产品 B 提供款式 2 或 3,产品 C 提供款式 4。复选框列表应按升序包含 1、2、3 和 4。

<asp:CheckBoxList 
    ID="CheckBoxListStyle" 
    Cssclass="CBL" 
    runat="server" 
    DataSourceId="SqlStyle"         
    OnSelectedIndexChanged="CheckBoxListStyle_SelectedIndexChanged" 
    AutoPostBack="True" 
    DataTextField="style1" 
    DataValueField="style2">
</asp:CheckBoxList>
<asp:SqlDataSource ID="SqlStyle" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:DC %>" 
    SelectCommand="SELECT DISTINCT style1, style2 FROM products ORDER BY ASC">
</asp:SqlDataSource>

我能够执行顺序复选框列表并设置它们的样式,使其看起来像一个列表,但样式整体上并不是按升序排列的。

asp.net checkboxlist
1个回答
0
投票

要实现在单个 CheckBoxList 中显示 style1 和 style2 不同样式的组合列表(按升序排序)的目标,您可以使用以下方法:

修改 SQL 查询:使用 UNION 将两个字段合并为一列,这将删除重复项。 以编程方式绑定结果:从 SQL 查询中获取组合列表并将其绑定到代码隐藏中的 CheckBoxList。

<asp:CheckBoxList 
   ID="CheckBoxListStyle" 
   CssClass="CBL" 
   runat="server" 
   AutoPostBack="True"
   OnSelectedIndexChanged="CheckBoxListStyle_SelectedIndexChanged">
</asp:CheckBoxList>
    
<asp:SqlDataSource 
   ID="SqlStyle" 
   runat="server" 
   ConnectionString="<%$ ConnectionStrings:DC %>" 
   SelectCommand="SELECT DISTINCT style1 FROM products 
      UNION 
         SELECT DISTINCT style2 FROM products 
         ORDER BY style1 ASC">
</asp:SqlDataSource>

隐藏代码(C#):

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // Create a list to hold all styles
        List<string> styles = new List<string>();

        // Execute the SqlDataSource to retrieve data
        DataView dataView = (DataView)SqlStyle.Select(DataSourceSelectArguments.Empty);
        foreach (DataRowView row in dataView)
        {
            // Add styles from both columns to the list
            string style1 = row["style1"].ToString();
            string style2 = row["style2"].ToString();

            if (!string.IsNullOrEmpty(style1))
                styles.Add(style1);
            if (!string.IsNullOrEmpty(style2))
                styles.Add(style2);
        }

        // Remove duplicates and sort the list
        var distinctStyles = styles.Distinct().OrderBy(s => s).ToList();

        // Bind the sorted list to the CheckBoxList
        CheckBoxListStyle.DataSource = distinctStyles;
        CheckBoxListStyle.DataBind();
    }
}

这是如何运作的?

UNION SQL 查询组合了 style1 和 style2 的值,同时消除了重复项。 在后面的代码中,数据被提取到一个列表中,然后使用 Distinct() 进行重复数据删除并使用 OrderBy() 进行排序。

排序列表绑定到 CheckBoxList,确保所有值都是唯一的并按升序排序。

此方法允许您在单个 CheckBoxList 中显示两个字段的合并和排序样式列表。

问候!

© www.soinside.com 2019 - 2024. All rights reserved.