Как установить переменные для ячеек сетки вида? - PullRequest
0 голосов
/ 17 марта 2011

Я относительно новичок в ASP, так что это может быть простым исправлением, которое я просто не выяснил (надеюсь!).Я работаю в VisualStudio2010, используя C #.

По сути, у меня есть таблица в SQL со следующими столбцами: Product, ProductGroup, Attribute1Value, Attribute2Value, Attribute3Value

Для каждой группы продуктов определение атрибута:разные.Например, в ProductGroup1 Attribute1 - это Размер, а Attribute1Value - 2,3,5 и т. Д. В ProductGroup2, Attribute1 - это Качество, а Attribute1Values ​​- это Стандарт, Эконом, Премиум и т. Д.

Я буду только когда-либоизвлекайте по одной группе продуктов за раз и хотели бы, чтобы заголовки моих столбцов отражали определение атрибута (Header = Size, а не Attribute1Value, когда это применимо ".

То, что я хотел бы сделать, это получить представление сетки, котороеневидим для столбцов ProductGroup, Attribute1, Attribute2, Attribute3, а затем присваиваем значения в столбце переменным, которые я могу использовать для переназначения заголовков столбцов. Я смог установить заголовки столбцов на основе других переменных (в частности, выбранного значения израскрывающийся список), но у меня возникают проблемы с кодом для установки переменных, равных значениям gridview.

Когда я попытался

    protected void Page_Load(object sender, EventArgs e)
    {
        lblAttribute1.Text = GridView4.Rows[0].Cells[2].Text;
    }

    protected void RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Cells[3].Text = lblAttribute1.Text;
        }
    }

, я получил сообщение об ошибке, что мой индекс вышел за пределы допустимого диапазона.Сначала я подумал, что это может быть потому, что мои Gridviewsне имеют строк при загрузке страницы, только после нескольких выборов из DropDowns, но я не знаю, связаны ли они вообще.Есть ли лучший способ сделать это в целом?

Извините, если это было плохо сформулировано.Пожалуйста, дайте мне знать, какая другая информация вам нужна.

Большое спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 17 марта 2011

Вы пробовали следующее:

  1. Извлечь информацию о группе товаров отдельно от записей о товаре (поскольку для всех записей о товаре существует только одна единица.
  2. Используйте запись ProductGroup, чтобы установить значения HeaderText для ваших столбцов Gridview.
  3. Свяжите сетку с продуктами.

Вы можете установить HeaderText столбца следующим образом:

Gridview4.Columns[2].HeaderText = attribute1ValueFromProductGroupRecord

Вам нужно сделать это только один раз для каждого столбца, возможно, в Page_Load.

0 голосов
/ 17 марта 2011

Возможно, вы можете попытаться создать классы, специфичные для ваших разных групп продуктов, а затем привязать их к вашей сетке соответствующим образом (в отличие от привязки необработанных данных из sql).

Например, вы сказали, что атрибут ProductGroup1представляет размер.Поэтому создайте класс, который является более четким представлением ProductGroup1, например:

public class ProductGroup1
{
  int Id{get;set;}
  int Size{get;set;}
}

Сделайте то же самое для других групп ProductGroup (т. Е. Класс ProductGroup2 будет иметь свойство Quality).

Вы упомянули вассобирались связывать только одну группу товаров за раз, поэтому я предполагаю, что у вас будут запросы БД, которые выбирают данные по ProductGroup.В этом случае возьмите возвращенные записи из вашего sql-запроса и преобразуйте / отобразите каждую запись в один из ваших классов (например, ProductGroup1 выше).

После этого вы должны получить список или массив классов ProductGroup.Затем вы можете привязать этот список или массив к своей сетке данных, используя автоматическое связывание заголовков столбцов, поскольку они будут соответствовать любым свойствам, которые вы определили в своем классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...