Доступ к стилям программно для получения значений - PullRequest
1 голос
/ 03 марта 2009

В нашем приложении у нас есть таблицы стилей для определения общих цветов и т. Д. Я написал быструю и грязную функцию, в которой я получаю набор данных из хранимой процедуры, отсекаю столбцы, которые я не хочу показывать, встраиваю их в Программно сгенерированный DataGrid, установите стили DataGrid, а затем экспортируйте его в Excel. Все любят цвета в выводе Excel (вздох! Они соответствуют цветам DataGrid, бла-бла-бла…).

Моя последняя часть, которую я хотел бы добавить к этому, - это то, что я хотел бы программно получить доступ к стилю и получить из него цветовые коды и другие элементы (.IntranetGridHead) вместо жесткого их кодирования, что я и делаю сейчас.

int iHeaderColor = Convert.ToInt32 ("D0D7E8", 16);
DataGrid dg = new DataGrid();
dg.DataSource = dsReturnDataSet.Tables[0].DefaultView;
dg.DataBind();

dg.HeaderStyle.BackColor = System.Drawing.Color.FromArgb(iHeaderColor);
dg.HeaderStyle.Font.Bold = true;
dg.HeaderStyle.Font.Size = 10;

Очевидно, что всякий раз, когда компания проходит еще один «ребрендинг» и меняются значения таблицы стилей, цвета Excel автоматически совпадают, и я получаю большое (похлопывание по спине || cookie).

Есть какие-нибудь мысли от людей из C #, которые знают больше, чем я (а это большинство из вас…)?
Спасибо,
Michael

Ответы [ 3 ]

2 голосов
/ 03 марта 2009

Все объекты Web.UI.Control имеют свойство .Styles, к которому можно обращаться как к стилям ["Имя"]. Поэтому вы можете сделать это:

DataTable dt = LookupStyles();
dg.Styles.Clear();
foreach (DataRow dr in dt.Rows)
  dg.Styles.Add(dr["StyleName"].ToString(), dr["StyleValue"].ToString());

У меня была похожая мысль несколько месяцев назад :) Обратите внимание, чтобы это работало правильно, ваша сетка должна быть runat = "server".

Edit: Похоже, что вы хотите ПРОЧИТАТЬ сетку и использовать это ... Если вы используете .CssStyle и таблицу стилей (.css), вам придется выполнить HTTP GET для этого файла CSS и проанализировать его самостоятельно.

1 голос
/ 05 марта 2009

Я написал что-то вроде этого некоторое время назад. Он включал HttpHandler для работы с файлами CSS, изменение конфигурации IIS для получения asp.net для получения запросов на файлы CSS и простую структуру файла xml, которая содержала мои определения цвета. Но вы сделали это с базой данных, что тоже хорошо.

Тогда в CSS у меня было что-то вроде этого ...

.button
{
    background-color: $colours:button-background-colour;
    color: $colours:button-text-colour;
}

с моим xml, определяющим значения для цвета фона кнопки и цвета текста кнопки. Я использовал замену текста регулярным выражением для обработки файла CSS, подставляя соответствующие значения из файла xml.

Я уверен, что вы могли бы взять некоторые из этих идей и объединить их с существующим кодом, чтобы получить желаемый эффект. Вам, конечно, нужно будет заняться кэшированием и изменениями в вашей базе данных / XML-файле.

Надеюсь, это поможет.

Если вам понадобятся какие-либо указатели на что-либо из этого, я уверен, что смогу найти пример кода.

1 голос
/ 03 марта 2009

Вам придется самостоятельно проанализировать файл CSS, и IIRC не имеет встроенного анализатора файлов CSS в .NET Framework. Однако есть бесплатный, который вы можете найти здесь:

http://www.codeproject.com/KB/recipes/CSSParser.aspx

После этого вы сможете использовать это для анализа файла CSS. Оттуда вы сможете получить стиль и значение и применить его к своей сетке данных.

...