我需要一个复选框列表来显示两个字段的数据。例如。产品 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>
我能够执行顺序复选框列表并设置它们的样式,使其看起来像一个列表,但样式整体上并不是按升序排列的。
要实现在单个 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 中显示两个字段的合并和排序样式列表。
问候!