德飞 2019-02-11 22:20 采纳率: 0%
浏览 363

紧急求助:Dev的xtraGrid控件的非绑定字段显示问题

我在使用Dev的xtraGrid控件时,需要添加某个值字段的关联信息,比如物料的ID信息为保存值,但是名称、规格为关联显示字段,不需要保存;因此设计xtraGrid表格时,ID字段为绑定数据库字段;名称、规格型号为非绑定字段。但是,在对CustomUnboundColumnData事件做断点监控的时候发现,程序一直在执行CustomUnboundColumnData这个事件(用SQL的事件工具进行跟踪,发现一直在执行查询)。
代码如下:
private void EntryGrid_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
{

        int rowID = e.ListSourceRowIndex;
        if (EntryGrid.GetRowCellValue(rowID, EntryGrid.Columns["FItemID"]).ToString().Trim() == "")
        {
            return;
        }
        else            
        {
            DataTable _Tbl = new DataTable();
            int ItemID = int.Parse(EntryGrid.GetRowCellValue(rowID, EntryGrid.Columns["FItemID"]).ToString());
            string _sql = string.Format("Select A.FNumber,A.FName,A.FModel,B.FName AS FUnit,A.FProductUnitID AS FUnitID From T_ICItem A Inner Join t_MeasureUnit B on A.FProductUnitID=B.FMeasureUnitID Where A.FItemID={0}", ItemID);
            _Tbl = db.GetData(_sql);                
            switch (e.Column.FieldName)
            {
                case "FName":
                    if (e.IsGetData == true) e.Value = _Tbl.Rows[0]["FName"].ToString();
                    break;                    
                case "FModel":
                    if (e.IsGetData == true) e.Value = _Tbl.Rows[0]["FModel"].ToString();
                    break;
                case "FUnit":
                    if (e.IsGetData == true)
                    {
                        e.Value = _Tbl.Rows[0]["FUnit"].ToString();
                        DataRow CurRow = Entry_tbl.Rows[rowID];
                        CurRow["FUnitID"] = _Tbl.Rows[0]["FUnitID"];
                    }
                    break;
                default:
                    break;
            }     
        }
    }
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 22:21
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在您的代码中,您正在尝试将“非绑定字段”(即名称和规格)的数据从数据库加载到当前行的网格视图中。为了实现这一点,您应该先获取这些字段的值,然后将其设置为当前行的网格视图中的数据。以下是一个示例,展示了如何做到这一点:

    private void EntryGrid_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
    
    {
        int rowID = e.ListSourceRowIndex;
    
        // 获取ID字段的值
        int itemID = int.Parse(EntryGrid.GetRowCellValue(rowID, EntryGrid.Columns["FItemID"]).ToString());
    
        // 将ID字段的值存储到临时变量中
        int? tempItemID = itemID;
    
        // 然后处理其他非绑定字段
        if (tempItemID.HasValue)
        {
            // 处理名称字段
            string name = null;
            if (e.Column.FieldName == "FName")
            {
                name = _Tbl.Rows[0]["FName"].ToString(); // 使用GetRowCellValue方法来获取值
            }
    
            // 处理规格字段
            string model = null;
            if (e.Column.FieldName == "FModel")
            {
                model = _Tbl.Rows[0]["FModel"].ToString();
            }
    
            // 设置非绑定字段的值
            if (!string.IsNullOrEmpty(name))
            {
                e.Value = name;
            }
            else if (!string.IsNullOrEmpty(model))
            {
                e.Value = model;
            }
            else
            {
                e.Value = "";
            }
        }
    }
    

    在这个示例中,我们首先尝试获取ID字段的值,然后将其存储在一个名为tempItemIDNullable<int>类型中。然后,我们检查tempItemID是否为空或未定义,并根据实际情况处理其他非绑定字段的值。

    评论

报告相同问题?