2010-03-05 4 views
9

Я создаю веб-часть SharePoint на C#, и часть ее выводит элемент управления GridView на страницу. Хотя я могу получить довольно обширный контроль над тем, как он отображается, установив класс CSS самого GridView, то, что я действительно хотел бы сделать, это указать классы для определенных определенных элементов td. Я не уверен, как это сделать, или если это будет сделано в то время, когда GridView заполняется строками или в то время, когда GridView добавляется на страницу.Как указать классы CSS для определенных строк в GridView?

В псевдокоде, что я по существу представлял, было возможность сказать что-то вроде gridView.Row[4].CssClass = "header", которое установило бы td пятой строки в GridView в заголовок класса.

Я посмотрел в использовании события RowDataBound, так что я просто использовал следующее проверить:

protected void outputGrid1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    e.Row.CssClass = "outputHeader"; 
} 

Это, вероятно, мое непонимание того, как использовать это правильно, но это не кажется, делать что-нибудь. Я думал, что он установит все строки в заголовок класса, и если бы это было так, я собирался работать над своей логикой оттуда, но я не могу даже заставить это работать. Спасибо за любую помощь, которую любой может предоставить!

ответ

17

я сделать что-то подобное с RowDataBound:

if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
    // Check the XXXX column - if empty, the YYYY needs highlighting! 
    if (e.Row.Cells[6].Text == " ") 
    { 
     e.Row.CssClass = "highlightRow"; // ...so highlight it 
    } 
} 

Один из способов, чтобы проверить, что вы делаете правильно, чтобы контролировать свой вывод HTML через браузер ... что-то вроде Firebug действительно помогает.

Вот некоторые примеры CSS, где мы относим CssClass «DataGrid» к сетке:

/* Used to highlight rows */ 
table.dataGrid tr.highlightRow td 
{ 
    background-color: #FF6666; 
    border-bottom: 1px solid #C0C0FF; 
} 

Update: Электропроводка все это до: Я использую автоматический провод вверх на странице ASPX. Объявление вашей страницы выглядит примерно так:

<%@ Page Language="C#" MasterPageFile="~/XXXXXX.master" AutoEventWireup="true" CodeBehind="YYYY.aspx.cs" Inherits="ZZZ.ZZZ.AAAAAA" Title="View Blah" %> 

Этот параметр на странице позволяет использовать пользовательский интерфейс для подключения событий. Щелкните по сетке, выберите свойства, щелкните значок удара молнии, а в поле RowDataBound выберите свой метод. Все это делает за кулисами добавить атрибут в DataGridView, таким образом:

 <asp:GridView ID="uiActionGridView" runat="server" AllowSorting="True" AutoGenerateColumns="False" 
     OnRowDataBound="uiActionGridView_RowDataBound" OnDataBound="uiActionGridView_DataBound"> 
  • это показывает два события будучи проводной вверх, события DataBound и RowDataBound.

Это то, что я использую VS2005, и все это похоже на «просто работу». Единственное, что я могу думать, что вы испытываете, - это то, что вы вручную привязываете событие после, произошел сбой данных.

+0

Мне нравится этот подход. Однако, перейдя через код в отладчике, я обнаружил, что мой RowDataBound не вызывается. Я написал его точно так же, как и в вопросе, и моя сетка называется outputGrid1. У вас есть идеи, почему это не вызовет RowDataBound? –

+0

Единственное, что мне нужно было сделать, это установить свойство RowDataBound моего GridView на метод RowDataBound, например: outputGrid1.RowDataBound + = outputGrid1_RowDataBound; Спасибо за вашу помощь! –

+0

@Geo Eye: см. Обновления выше. Возможно, разместите свой код, если вы продолжаете испытывать проблемы – Nij