Программный доступ к стилям для получения значений

StackOverflow https://stackoverflow.com/questions/606943

  •  03-07-2019
  •  | 
  •  

Вопрос

В нашем приложении есть таблицы стилей для определения общих цветов и т. д. Я написал быструю и грязную функцию, в которой я получаю набор данных из хранимой процедуры, отсекаю столбцы, которые не хочу показывать, и втискиваю их в программно сгенерированный 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 будут автоматически совпадать, и я получу большое (похлопывание по спине || печенье).

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top