Как установить RowStyle строки GridView в зависимости от свойства Объекта, с которым связывается строка

Я в настоящее время использую 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

5
задан Frinavale 20 January 2010 в 16:24
поделиться

1 ответ

Прекратить использование 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 (если это уместно).

5
ответ дан 14 December 2019 в 04:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: