Как обрабатывать нулевые значения (в столбцах) в Telerik RadGrid? (Заменить на HTML)

у меня есть BoundColumn в моем телерике RadGrid, как показано ниже:

                    <telerik:GridBoundColumn DataField="Status" FilterControlAltText="Filter Status column"
                        HeaderText="Status" SortExpression="Status" UniqueName="Status"
                        FilterImageToolTip="Filter">
                        <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                        <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                    </telerik:GridBoundColumn>

Столбец состояния в моей базе данных sql server 2008 может принимать нулевые значения, и RadGrid показывает их с пустой строкой.
как я могу заменить эти Empty Strings на Colorable Strings?
означает замену чем-то вроде этого -> <span style='color: red;'>Empty</span> я знаю, что могу преобразовать этот BoundColumn в TemplateColumn следующим образом:

                        <telerik:GridTemplateColumn FilterControlAltText="Filter TemplateColumn_Status column"
                            HeaderText="Status" UniqueName="TemplateColumn_Status" FilterImageToolTip="Filter"
                            ReadOnly="False" Visible="False">
                            <ItemTemplate>
                                <asp:Label ID="lblStatusInsideGrd" runat="server" Font-Size="11px" Text='<%# (bool)Convert.IsDBNull(Eval("Status")) ? "<span class=\"lblInsideGrd\">Empty</span>" : Eval("Status") %>'></asp:Label>
                            </ItemTemplate>
                            <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                            <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                        </telerik:GridTemplateColumn>

эта замена является хорошей идеей и прекрасно работает. но при этом я теряю RadGrid Filering в этом столбце.
не могли бы вы показать мне другой способ сохранения RadGrid Friltering?

заранее спасибо


person SilverLight    schedule 30.05.2012    source источник


Ответы (1)


Вы можете сделать это в событии ItemDataBound, когда сетка привязана к SqlDataSource, так как в вашем случае вы можете получить текущий DataRow:

Обновление: я оставил только код, который работает с DataRow, и исправил настройку фона столбца.

public void TestGrid_ItemDataBound(Object sender, Telerik.Web.UI.GridItemEventArgs e)
{
  if (e.Item is GridDataItem)
  {
    if (e.Item.DataItem is DataRowView)
    {
      GridDataItem gdItem = (GridDataItem)e.Item;
      DataRow rw = ((DataRowView)e.Item.DataItem).Row;
      if (rw.IsNull("Status"))
      {
        GridColumn urlColumn = TestGrid.MasterTableView.Columns.FindByUniqueName("Status");
        gdItem.Cells[urlColumn.OrderIndex].BackColor = Color.Red;
        gdItem["Status"].Text = "Empty";
      }
    }
  }
}

EDIT BY QUESTIONER
Большое спасибо за эти коды.
Нижеприведенные коды мне подходят :

protected void grdSMS_ItemDataBound(object sender, GridItemEventArgs e)
{
    if (e.Item is GridDataItem)
    {
        GridDataItem item = (GridDataItem)e.Item;
        if (item["Status"].Text == "&nbsp;")
        {
            item["Status"].ForeColor = Color.Red;
            item["Status"].Text = "Empty";
        }
    }
}
person Antonio Bakula    schedule 30.05.2012
comment
Спасибо за ответ. но как я могу изменить текст (значение) этого элемента на пустой? - person SilverLight; 30.05.2012
comment
дорогой братан, по твоему способу №1 ничего не происходит, а по способу №2 все столбцы (включая столбцы данных -> не нулевые, включая столбцы, отличные от столбцов состояния) становятся красными. в чем проблема? - person SilverLight; 30.05.2012
comment
Вы установили событие сетки onitemdatabound для этого метода (RadGrid1_ItemDataBound)? - person Antonio Bakula; 30.05.2012
comment
Ну, я попробовал, и это работает, установите точку останова в этом событии и посмотрите, что происходит. - person Antonio Bakula; 30.05.2012
comment
спасибо за правку -› в этой строке ошибка -› e.Item[Status].Text = Empty; (Способ 2) - person SilverLight; 30.05.2012
comment
Ошибка 24. Невозможно применить индексирование с [] к выражению типа «Telerik.Web.UI.GridItem» F:\Programming\SMS.aspx.cs - person SilverLight; 30.05.2012
comment
извините, исправлено, это связано с GridDataItem, поэтому нам нужно его бросить - person Antonio Bakula; 30.05.2012
comment
у человека способ №1 не работает, а у способа №2 все столбцы красные. мы должны изменить нулевые столбцы, а не все строки. кроме того, пустая строка не работает. так запутался в этой ситуации. - person SilverLight; 30.05.2012
comment
давайте продолжим это обсуждение в чате - person Antonio Bakula; 30.05.2012
comment
Теперь все в порядке - спасибо за обновление. - person SilverLight; 31.05.2012