У меня есть 6 списков флажков для выбора бренда, коллекции, продукта, подкатегории, отделки и статуса на складе. Я хотел бы ограничить эти списки флажков на основе выбора в других списках флажков. Например, если кто-то выберет вариант из бренда, то 5 других списков флажков будут обновлены, чтобы отображать только параметры, соответствующие этому бренду. Это не линейно, поэтому пользователи должны иметь возможность начинать с любого списка флажков и должны разрешать множественный выбор в списках флажков.
Вот что у меня есть на данный момент (просто показываю два из них). ведь они все похожи). Проблема, с которой я столкнулся, заключается в том, что любой выбор приводит к тому, что все списки флажков становятся серыми.
protected void CheckBoxListBrand_SelectedIndexChanged(object sender, EventArgs e)
{
LabBrand.Text = "";
FilterCheckBoxLists();
String whereis = " (Table.Vendor = '";
CheckBoxList ckl = (CheckBoxList)sender;
Boolean first = true;
Boolean somechecked = false;
selectionbrand.Text = "";
foreach (ListItem li in ckl.Items)
{
if (li.Selected == true)
{
if (first)
{
whereis += li.Value;
first = false;
}
else
{
whereis += "') OR (Table.Vendor = '" + li.Value;
}
selectionbrand.Text += " " + li.Text;
somechecked = true;
}
}
whereis += "')";
if (somechecked)
{
LabBrand.Text += whereis;
}
Updatepage();
}
protected void CheckBoxListBrand_Set()
{
LabBrand.Text = "";
FilterCheckBoxLists();
String whereis = " (Table.Vendor = '";
CheckBoxList ckl = CheckBoxListBrand;
Boolean first = true;
Boolean somechecked = false;
foreach (ListItem li in ckl.Items)
{
if (li.Selected == true)
{
if (first)
{
whereis += li.Value;
first = false;
}
else
{
whereis += "') OR (Table.Vendor = '" + li.Value;
}
somechecked = true;
}
}
whereis += "')";
if (somechecked)
{
LabBrand.Text += whereis;
}
}
protected void CheckBoxListCollection_SelectedIndexChanged(object sender, EventArgs e)
{
LabCollection.Text = "";
FilterCheckBoxLists();
String whereis = " (Table.Collection = '";
CheckBoxList ckl = (CheckBoxList)sender;
Boolean first = true;
Boolean somechecked = false;
selectioncollection.Text = "";
foreach (ListItem li in ckl.Items)
{
if (li.Selected == true)
{
if (first)
{
whereis += li.Value;
first = false;
}
else
{
whereis += "') OR (Table.Collection = '" + li.Value;
}
selectioncollection.Text += " " + li.Text;
somechecked = true;
}
}
whereis += "')";
if (somechecked)
{
LabCollection.Text += whereis;
}
Updatepage();
}
protected void CheckBoxListCollection_Set()
{
LabCollection.Text = "";
FilterCheckBoxLists();
String whereis = " (Table.Collection = '";
CheckBoxList ckl = CheckBoxListCollection;
Boolean first = true;
Boolean somechecked = false;
foreach (ListItem li in ckl.Items)
{
if (li.Selected == true)
{
if (first)
{
whereis += li.Value;
first = false;
}
else
{
whereis += "') OR (Table.Collection = '" + li.Value;
}
somechecked = true;
}
}
whereis += "')";
if (somechecked)
{
LabCollection.Text += whereis;
}
}
private void FilterCheckBoxLists()
{
var selectedBrands = GetSelectedValues(CheckBoxListBrand);
var selectedCollections = GetSelectedValues(CheckBoxListCollection);
FilterBrands(selectedCollections, selectedProducts, selectedSubCats, selectedFinishes, selectedStocks);
FilterCollections(selectedBrands, selectedProducts, selectedSubCats, selectedFinishes, selectedStocks);
}
private List GetSelectedValues(CheckBoxList checkBoxList)
{
return checkBoxList.Items.Cast()
.Where(li => li.Selected)
.Select(li => li.Value)
.ToList();
}
private void FilterBrands(List selectedCollections, List selectedProducts, List selectedSubCats, List selectedFinishes, List selectedStocks)
{
foreach (ListItem item in CheckBoxListBrand.Items)
{
item.Enabled = true;
}
if (selectedCollections.Any() || selectedProducts.Any() || selectedSubCats.Any() || selectedFinishes.Any() || selectedStocks.Any())
{
foreach (ListItem item in CheckBoxListBrand.Items)
{
item.Enabled = IsBrandRelated(selectedCollections, selectedProducts, selectedSubCats, selectedFinishes, selectedStocks, item.Value);
}
}
}
private void FilterCollections(List selectedBrands, List selectedProducts, List selectedSubCats, List selectedFinishes, List selectedStocks)
{
foreach (ListItem item in CheckBoxListCollection.Items)
{
item.Enabled = true;
}
if (selectedBrands.Any() || selectedProducts.Any() || selectedSubCats.Any() || selectedFinishes.Any() || selectedStocks.Any())
{
foreach (ListItem item in CheckBoxListCollection.Items)
{
item.Enabled = IsBrandRelated(selectedBrands, selectedProducts, selectedSubCats, selectedFinishes, selectedStocks, item.Value);
}
}
}
private bool IsBrandRelated(List selectedCollections, List selectedProducts, List selectedSubCats, List selectedFinishes, List selectedStocks, string brandValue)
{
return
selectedCollections.Any(collection =>
IsCollectionForBrand(collection, brandValue)) ||
selectedProducts.Any(product =>
IsProductForBrand(product, brandValue)) ||
selectedSubCats.Any(subcat =>
IsSubCatForBrand(subcat, brandValue)) ||
selectedFinishes.Any(finish =>
IsFinishForBrand(finish, brandValue)) ||
selectedStocks.Any(stock =>
IsStockForBrand(stock, brandValue));
}
private bool IsCollectionRelated(List selectedBrands, List selectedProducts, List selectedSubCats, List selectedFinishes, List selectedStocks, string collectionValue)
{
return
selectedBrands.Any(brand =>
IsBrandForCollection(brand, collectionValue)) ||
selectedProducts.Any(product =>
IsProductForCollection(product, collectionValue)) ||
selectedSubCats.Any(subcat =>
IsSubCatForCollection(subcat, collectionValue)) ||
selectedFinishes.Any(finish =>
IsFinishForCollection(finish, collectionValue)) ||
selectedStocks.Any(stock =>
IsStockForCollection(stock, collectionValue));
}
//checking CBLs against selected Brand
private bool IsCollectionForBrand(string collection, string brand)
{
return ExecuteQuery($"SELECT COUNT(*) FROM Table WHERE Collection = '{collection}' AND Vendor = '{brand}'") > 0;
}
private bool IsProductForBrand(string product, string brand)
{
return ExecuteQuery($"SELECT COUNT(*) FROM Table WHERE Product = '{product}' AND Vendor = '{brand}'") > 0;
}
private bool IsSubCatForBrand(string subcat, string brand)
{
return ExecuteQuery($"SELECT COUNT(*) FROM Table WHERE SubCategory = '{subcat}' AND Vendor = '{brand}'") > 0;
}
private bool IsFinishForBrand(string finish, string brand)
{
return ExecuteQuery($"SELECT COUNT(*) FROM Table WHERE Finish = '{finish}' AND Vendor = '{brand}'") > 0;
}
private bool IsStockForBrand(string stock, string brand)
{
return ExecuteQuery($"SELECT COUNT(*) FROM Table WHERE Stock = '{stock}' AND Vendor = '{brand}'") > 0;
}
(***SIMILAR CODE TO CHECK CBLs AGAINST SELECTED COLLECTIONS***)
private int ExecuteQuery(string query)
{
int count = 0;
string connectionString = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
count = (int)command.ExecuteScalar();
}
}
return count;
}
и .aspx
Brand
Collection
Подробнее здесь: https://stackoverflow.com/questions/790 ... kbox-lists
Фильтрация списков флажков на основе других списков флажков ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Проблема с выравниванием флажков Vue.js: центрирование флажков внутри ячеек таблицы
Anonymous » » в форуме CSS - 0 Ответы
- 91 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Проблема с выравниванием флажков Vue.js: центрирование флажков внутри ячеек таблицы
Anonymous » » в форуме CSS - 0 Ответы
- 67 Просмотры
-
Последнее сообщение Anonymous
-