У меня есть 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#
Место общения программистов C#
-
Anonymous
1728913683
Anonymous
У меня есть 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
Подробнее здесь: [url]https://stackoverflow.com/questions/79086407/filtering-checkbox-lists-based-on-other-checkbox-lists[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия