简体   繁体   English

如何处理Telerik RadGrid中的空值(在列中)? (用HTML替换)

[英]How Handle Null Values(In Columns) In Telerik RadGrid? (Replace With HTML)

i have a BooundColumn in my telerik RadGrid like below : 我在Telerik RadGrid中有一个BooundColumn,如下所示:

                    <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>

Status Column in my sql server 2008 database can accept null values and RadGrid shows them with an empty string. 我的sql server 2008数据库中的“状态列”可以接受空值,RadGrid用空字符串显示它们。
how can i replace these Empty Strings with a Colorable Strings ? 如何用可Colorable Strings替换这些Empty Strings Colorable Strings
mean replacement with something like this -> <span style='color: red;'>Empty</span> i know i can convert that BoundColumn to TemplateColumn like this : 意味着用这样的东西替换-> <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>

this replacement is a good idea and works great. 这种替换是一个好主意,效果很好。 but by doing that i lose RadGrid Filering on this column. 但是这样做Filering我在此列上丢失Filering
would you please showe me another way with keeping RadGrid Friltering? 您能告诉我另一种保持RadGrid Friltering的方法吗?

thanks in advance 提前致谢

You could do that on ItemDataBound event, when grid is binded to SqlDataSource as in your case you can get current DataRow : 您可以在ItemDataBound事件上执行此操作,将网格绑定到SqlDataSource时,就可以得到当前的DataRow:

Update : I leaved just code that works with DataRow, and fix column background setting 更新 :我只留下了与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 由提问者编辑
Really thanks for these codes. 非常感谢您提供这些代码。
the codes below are ok for me : 下面的代码对我来说还可以:

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";
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM