Я в настоящее время использую GridView, и я хочу установить CssClass для строки в зависимости от свойства объекта, с которым связывается строка.
Я попробовал следующее, но это не работает (см. комментарии):
<asp:GridView id="searchResultsGrid" runat="server" AllowPaging="true" PageSize="20" AutoGenerateColumns="false">
<!-- The following line doesn't work because apparently "Code blocks
aren't allowed in this context: -->
<RowStyle CssClass="<%#IIF(DataBinder.Eval(Container.DataItem,"NeedsAttention","red","") %>
<Columns>
<!--............-->
</Columns>
</asp:GridView>
Теперь я мог просто обработать событие GridView's RowDataBound и изменить класс CSS строки там..., но я пытаюсь сохранить четкое разделение между UI и слоями страницы/бизнес-логики.
Я понятия не имею, как выполнить это, и я надеюсь слышать любые предложения.
Спасибо,
- Frinny
Прекратить использование MySQLdb. У него такое глупое поведение, как усечение данных и выдача только предупреждения. Вместо этого используйте oursql .
-121--1277337-По сравнению с некоторыми вещами, над которыми я работал, звучит довольно мало. Тем не менее, существует другой подход, который будет работать в сочетании с тем, который показал PeanutPower выше.
Ответ состоит в том, чтобы построить структуру, которая позволит вам вырезать разделы программы за один раз и конвертировать их поочередно.
например. Вставьте слой адаптера базы данных, который обрабатывает все вызовы базы данных, затем один за другим, удалите каждый из SQL и замените его вызовом уровня базы данных. Старые вызовы по-прежнему будут выполняться напрямую, в то время как новые вызовы будут проходить через уровень. В конечном счете все вызовы будут проходить через уровень, и вы можете изменить бэкэнд-БД.
Вы можете сделать то же самое с любым другим разделом кода, развернув рамку «layer», чтобы охватить эту функциональность.
Ключ к переносу его из VB6 в VB.NET (например) заключается в использовании библиотеки Interop - вот одна статья: http://support.microsoft.com/kb/817248
Другая, гораздо более поздняя мысль: Get MZ-Tools и используйте их инструмент анализа, чтобы найти избыточный код и избавиться от него. Мне удалось устранить что-то вроде пяти-десяти процентов кода в старом устаревшем продукте моей компании.
-121--1555328-Это невозможно сделать в декларативной разметке.
Почти все свойства описания GridView
(включая GridView.RowStyle
) являются параметрами настройки на уровне сетки, а не на уровне строки. Кроме TemplateFields
, они не являются связанными контейнерами данных, поэтому не имеют доступа к данным в строках.
Если вы хотите сохранить эту логику в шаблоне .aspx, ваш единственный реальный вариант - использовать поля шаблона и манипулировать их содержимым:
<asp:TemplateField>
<ItemTemplate>
<span class="<%# ((string)Eval("property3")) == "NeedsAttention" ? "red" : string.Empty %>">
<%# Eval("property1") %>
</span>
</ItemTemplate>
</asp:TemplateField>
В зависимости от того, что вы хотите сделать, это может быть неловко - у вас нет доступа к содержащему < td >
(или < tr >
для этого), и вам придется повторить форматирование для каждой камеры
Класс GridView
имеет большую длину, чтобы скрыть от вас сведения о HTML и стиле. В конце концов, может создать адаптер управления GridView
, который даже не будет отображаться как HTML-таблицы. (Маловероятно, хотя это может быть.)
Поэтому, даже если вы пытаетесь избежать этого, вам, вероятно, лучше иметь дело с этим в обработчике OnRowDataBound
- или использовать Repeater
(если это уместно).