You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ XE4中TMS TDBADVGRID含"<C"数据时字段空白问题求助

解决TMS TDBAdvGrid中含""格式字段显示空白的问题

问题根源

TDBAdvGrid默认可能启用了HTML格式解析功能,<C会被识别为HTML标签的起始片段(比如<CENTER>的开头),由于标签未闭合,组件会错误地隐藏整个单元格内容。

解决方案

1. 禁用网格/列的HTML格式解析

找到对应列或网格的HTMLFormat属性,设置为False:

  • 全局设置:在TDBAdvGrid的属性面板中找到HTMLFormat,取消勾选。
  • 单列设置:在列编辑器中选中目标列,找到Properties.HTMLFormat,设置为False。

2. 通过OnGetCellText事件手动控制显示文本

如果禁用HTML无效,绑定网格的OnGetCellText事件,直接返回原始字段值或转义特殊字符:

void __fastcall TForm1::DBAdvGrid1GetCellText(TObject *Sender, int ACol, int ARow, UnicodeString &AText)
{
    // 替换成你的目标列索引和字段名
    if (ACol == 3) 
    {
        // 直接返回原始数据,绕过组件的自动解析
        AText = DataSource1->DataSet->FieldByName("YOUR_FIELD")->AsString;
        // 可选:转义<符号避免被解析,也能正常显示
        // AText = StringReplace(AText, "<", "&lt;", TReplaceFlags() << rfReplaceAll);
    }
}

3. 自定义绘制单元格(终极方案)

如果前两种方法都不生效,使用OnDrawCell事件完全自定义单元格内容的绘制:

void __fastcall TForm1::DBAdvGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State)
{
    // 仅处理数据行和目标列
    if (ACol == 3 && ARow >= DBAdvGrid1->FixedRows)
    {
        UnicodeString cellContent = DataSource1->DataSet->FieldByName("YOUR_FIELD")->AsString;
        // 填充单元格背景
        DBAdvGrid1->Canvas->FillRect(Rect);
        // 绘制文本(可调整偏移量适配网格样式)
        DBAdvGrid1->Canvas->TextOut(Rect.Left + 2, Rect.Top + 2, cellContent);
    }
}

内容的提问来源于stack exchange,提问作者Mary C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:05:24