Внесение изменений в Gridview в соответствии со свойствами таблицы - PullRequest
0 голосов
/ 09 июля 2010

Я попытаюсь объяснить сценарий.

У меня есть сетка, которую я хочу изменить в соответствии с предпочтениями, которые может установить пользователь. Эти предпочтения хранятся в таблице в EDMX (tblPref). Таблица дает предпочтение, т. Е. «Продукт», «Псевдоним» для предпочтения, т. Е. SKU, и следует ли отображать «Предпочтение», т. Е. ShowProduct?

Так, например, «стандартная сетка» будет выглядеть так:

Product  UUF1   UUF2
1        a        d
2        b        e
3        c        f

tblPreference будет выглядеть следующим образом:

Preference Alias   ShowPreference
Product    Product     1
UUF1       UUF1        1
UUF2       UUF2        1

Однако, возможно, пользователь захочет увидеть разные столбцы, т.е.

Product     UUF2
    1        d
    2        e
    3        f

tblPreference будет выглядеть следующим образом:

Preference Alias   ShowPreference
Product    Product     1
UUF1       UUF1        0
UUF2       UUF2        1

И / или они хотят пометить заголовки другим текстом, т.е.

   SKU    Category Sub-Category
    1        a        d
    2        b        e
    3        c        f

tblPreference будет выглядеть следующим образом:

Preference Alias   ShowPreference
Product    SKU             1
UUF1       Category        1
UUF2       Sub-Category    1

Теперь я понимаю, что можно скрыть столбцы (gridview.columns [0] .Visbile = False) и изменить текст заголовка (gridview.HeaderRow.Cells [0] .Text = "Sku"). .

Что я не уверен, так это то, как я все это привел ... важная часть!

Очевидно, что будет задействовано немало «если», но мне было интересно, делал ли кто-нибудь что-то подобное раньше и мог бы предоставить немного псевдокода?

Причина, по которой я иду по этому маршруту, заключается в том, что у меня может быть несколько сотен пользователей, которые потенциально могут пожелать, чтобы представление grid-системы выглядело совершенно иначе. Будучи новичком, для меня также полезно попробовать более сложные вещи, чем «перетаскивание».

Поэтому любая предоставленная помощь будет с благодарностью получена.

Ответы [ 2 ]

0 голосов
/ 11 июля 2010

Если ваша сетка настроена таким образом в aspx-файле.

<asp:GridView runat=server ID=grid1 AutoGenerateColumns=false></asp:GridView>

Тогда вы сможете использовать следующий код для динамического создания полей, необходимых в сетке.

using (SqlConnection conn = new SqlConnection("MySqlConnectionString"))
{
    conn.Open();
    SqlCommand cmd = new SqlCommand("select * from tblPreference"); // you will also have to limit this selection to only rows for this user.
    cmd.Connection = conn;
    using (SqlDataReader dr = cmd.ExecuteReader())
    {
        while (dr.Read())
        {
            if(dr.GetInt32(dr.GetOrdinal("ShowPreference"))==1) //not sure if this is a bit or int field
            {
                grid1.Columns.Add(new BoundField(){ 
                    HeaderText = dr.GetString(dr.GetOrdinal("Alias")),
                    DataField = dr.GetString(dr.GetOrdinal("Preference"))
                });
            }

        }
    }
}

Хотя я уверен, что это придется немного адаптировать для вашего конкретного использования.Это должно дать вам хорошее начало.Обратите внимание, что после выполнения описанного выше для настройки ваших столбцов вам все равно нужно будет обеспечить сетку данными либо с помощью элемента управления DataSource, либо вручную связать его, как показано ниже

grid1.DataSource = MyDataReader; //or data table, or collection of objects
grid1.DataBind();
0 голосов
/ 11 июля 2010

Вы можете попытаться определить ваши столбцы программно в коде, а не декларативно в файле aspx.Вы можете добавить обработчик для события DataBound, возможно, и в нем вы можете создать свой BoundFields с любым нужным текстом заголовка.

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