#c# #asp.net #gridview #visual-studio-2015
#c# #asp.net #gridview #visual-studio-2015
Вопрос:
У меня на моей странице есть два вида сетки — grvBookCategories
показывает категории одной конкретной книги и grvCategories
содержит все возможные категории для библиотеки. grvBookCategories
отображается при загрузке страницы и grvCategories
запускается при нажатии кнопки. cbxGrvCategories
В ItemTemplate of есть флажок grvCategories
.
Вопрос в том, как перебрать эти два вида сетки, чтобы найти одинаковые значения в обоих из них (оба содержат столбец с именем категории)? Если есть совпадение — соответствующий флажок должен быть установлен. Например, если в них 3 строки, grvBookCategories
то также должны быть установлены 3 флажка grvCategories
.
Я пытался сделать это, используя циклы событий grvCategories_RowDataBound и foreach, но результаты не совсем правильные. Проблема в том, что в последней grvCategories
строке есть совпадение. В таком случае флажок в этой строке никогда не установлен, для всех остальных строк результаты в порядке.
protected void grvCategories_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string rowcValue = "";
string rowbcValue = "";
CheckBox cbx = new CheckBox();
foreach (GridViewRow rowc in grvCategories.Rows)
{
if (rowc.RowType == DataControlRowType.DataRow)
{
rowcValue = rowc.Cells[2].Text;
cbx = (CheckBox)rowc.Cells[3].FindControl("cbxGrvCategories");
foreach (GridViewRow rowbc in grvBookCategories.Rows)
{
if (rowbc.RowType == DataControlRowType.DataRow)
{
rowbcValue = rowbc.Cells[1].Text;
if (rowcValue.Equals(rowbcValue))
{
cbx.Checked = true;
break;
}
else
{
cbx.Checked = false;
}
}
}
}
}
}
}
Заранее спасибо за любую помощь!
Комментарии:
1. foreach (GridViewRow row1 в G1.Rows) { if (row1. RowType == DataControlRowType.DataRow) { строка gv1Value = row1.Cells[0].Text; //итерация второго gridview foreach (GridViewRow row2 в G2.Rows) { if (row2.RowType == DataControlRowType.DataRow) { строка gv2Value = row2.Cells[0].Text; //сделайте сравнение здесь, если (gv1Value. Равно(gv2Value)) { }}}}}
2. Поиск полей в таком представлении сетки будет работать только со
BoundField
столбцами. НеTemplateField
иAutoGenerated
столбцы. Лучше выполнить поиск по исходным данным.3. @viveknuna К сожалению, у меня это все еще не работает
4. @VDWWD Данные из базы данных находятся в BoundField, кнопки помещаются в TemplateField, значение AutoGenerateColumns равно false. Так разве это нельзя как-то сделать?
5. Если это boundfields, то это можно сделать. Похоже, вы на правильном пути с введенным кодом
grvCategories_RowDataBound
. Что именно представляют собой эти «совершенно неправильные результаты»? Что это такое и что ожидается? И вы связывали данныеgrvCategories
раньшеgrvBookCategories
? В противном случае поиск всегда будет ложным.