.net DataGirdView 通过列索引修改单元格字体

场景是这样、我需要DataGirdView某几列数量大于0字体就变成蓝色,某几列超过标准值字体就变成红色

具体列名属性
    void InitCols()
    {
        var col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "OrderNo", " 工单号");
        col.Width = 125;
        // col.Frozen = true;
        _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "PrdCode", "料号");
        _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "MaterialName", "型号");
        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "PlanStartDate", " 计划工单时间");
        col.DefaultCellStyle.Format = "yyyy-MM-dd";
        // col.Frozen = true;
        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "OrderCount", " 工单投产量(K)");
        col.DefaultCellStyle.Format = "0.###";
        //col.Frozen = true;
        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "GJKS", " 固晶");
        col.DefaultCellStyle.Format = "0.###";
        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "GJJS", " 待固晶");
        col.DefaultCellStyle.Format = "0.###";

        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "HXKS", " 焊线");
        // col.Frozen = true;
        col.DefaultCellStyle.Format = "0.###";
        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "HXJS", " 待焊线");
        // col.Frozen = true;
        col.DefaultCellStyle.Format = "0.###";
        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "MYKS", " 模压");
        //col.Frozen = true;
        col.DefaultCellStyle.Format = "0.###";
        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "MYJS", " 待模压");
        //col.Frozen = true;
        col.DefaultCellStyle.Format = "0.###";

        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "QGKS", " 切割");
        //col.Frozen = true;
        col.DefaultCellStyle.Format = "0.###";
        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "QGJS", " 待切割");
        //col.Frozen = true;
        col.DefaultCellStyle.Format = "0.###";

        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "FGKS", " 分光");
        //col.Frozen = true;
        col.DefaultCellStyle.Format = "0.###";
        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "FGJS", " 待分光");
        //col.Frozen = true;
        col.DefaultCellStyle.Format = "0.###";
        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "BDKS", " 编带");
        //col.Frozen = true;
        col.DefaultCellStyle.Format = "0.###";
        col = _DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail, "BDJS", " 编带结束");
        // col.Frozen = true;
        col.DefaultCellStyle.Format = "0.###";
    }

添加事件
image

在列名字前加上DataGirdView_col就能检索到对应列
image

方法的具体编写 private void dgvDetail_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
        DataGridView dgv = (DataGridView)sender;

        // 判断当前单元格所在的列是否是待完成列
        // 您可以根据列名或者列索引来判断
        // 在这个示例中,我们假设这些列是按列名来判断的
        string[] completionColumns = { "dgvDetail_colGJJS", "dgvDetail_colHXJS", "dgvDetail_colMYJS", "dgvDetail_colQGJS", "dgvDetail_colFGJS", "dgvDetail_colBDJS" };
        string columnName = dgv.Columns[e.ColumnIndex].Name;

        // 如果列名在待完成列数组中
        if (completionColumns.Contains(columnName))
        {
            // 获取单元格的值
            if (e.Value != null && decimal.TryParse(e.Value.ToString(), out decimal cellValue))
            {
                // 如果单元格的值大于 0,则将字体颜色设置为蓝色
                if (cellValue > 0)
                {
                    e.CellStyle.ForeColor = Color.DarkBlue;
                }
                else
                {
                    // 重置为默认颜色
                    e.CellStyle.ForeColor = dgv.DefaultCellStyle.ForeColor;
                }
            }
        }


        string[] processColumns = { "dgvDetail_colGJKS", "dgvDetail_colHXKS", "dgvDetail_colMYKS", "dgvDetail_colQGKS", "dgvDetail_colFGKS", "dgvDetail_colBDKS" };
        // 检查列名是否是工序实际数量列
        if (processColumns.Contains(columnName))
        {
            // 获取当前行
            var row = dgv.Rows[e.RowIndex];

            // 获取当前单元格的实际数量值
            if (decimal.TryParse(row.Cells[columnName].Value?.ToString(), out decimal actualQty))
            {
                // 获取工单投产量
                if (decimal.TryParse(row.Cells["dgvDetail_colOrderCount"].Value?.ToString(), out decimal planQty))
                {
                    // 比较实际数量和工单投产量
                    if (actualQty > planQty)
                    {
                        // 如果实际数量大于工单投产量,将单元格的字体颜色设置为红色
                        e.CellStyle.ForeColor = Color.Red;
                    }
                    else
                    {
                        // 否则保持默认颜色
                        e.CellStyle.ForeColor = dgv.DefaultCellStyle.ForeColor;
                    }
                }
            }
        }


    }
posted @ 2024-05-15 08:38  咸鱼过海  阅读(28)  评论(0编辑  收藏  举报