数据网格视图中为零值而不是负值

时间:2018-09-30 15:12:16

标签: c# winforms

我想摆脱在datagrid上具有负值的问题,我只想表明,一旦该项目缺货,它将只显示零而不是-4

要考虑的事项: -我在这里手动调用datagridview:

def anagram(s):
    flag = 0
    if len(s)%2 != 0: return -1
    else:
        temp1,temp2 = s[:len(s)//2],s[len(s)//2:]  
        temp1 = ''.join(sorted(temp1))
        temp2 = ''.join(sorted(temp2))

        for i in temp1:
            flag1 = temp2.count(i)
            if flag1>1: flag1 = 1
            else: flag1 = flag1
            flag += flag1
    return flag 

4 个答案:

答案 0 :(得分:0)

 public static void ReplaceAllNegativeWithZeros(DataGridView dgv)
    {
        foreach (DataGridViewRow row in dgv.Rows)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                if (cell.Value != null)
                {
                    if (Convert.ToInt32(cell.Value.ToString()) < 0)
                    {
                        cell.Value = 0;
                    }
                }
            }
        }
    }

答案 1 :(得分:0)

因此,您所拥有的产品的库存量为负,但是您不希望最终用户也看到它,而只是看到0(表示缺货)。

有很多方法可以解决此问题,但可以说您无法避免陷入负数,然后可以在填充datagridview之后对其进行过滤。附加功能=较慢的程序,因此请重新考虑解决问题而不要减负。

所以如何使用extension

您可以这样创建它(我将举一个简单的例子):

public static void ReplaceAllNegativeWithZeros(this DataGridView dgv)
{
    foreach(DataGridViewRow row in dgv.Rows)
    {
        foreach(DataGridViewCell cell in dgv.Cells)
        {
            //This will loop through all cells in your currently displayed datagridview
            //You call this function like yourDataGridViewInForm.ReplaceAllNegativeWithZeros();

            //Here check if value from cell meets your condition and then change it.
        }
    }
}

使用此方法,您可以检查所有单元格(或仅一列)并根据需要使用它的值(如果<0,则将其替换为0)

答案 2 :(得分:0)

一种方法是让查询返回格式化或计算出的值,例如

select case when i.quantity < 0 then 0 else i.quantity end as quantityZero, 
       i.* 
from InventoryTable i

现在,您可以将原始quantity列放在datagridview上不可见。
这样,您既可以使用原始值,也可以使用zero时显示< 0的值

最好不要执行select *,而是始终列出您需要的字段。

答案 3 :(得分:0)

这不应该在sql查询中处理。
这是视图逻辑的责任。 DataGridView是视图的控件,可以在将数量转换为“友好”值的正确位置。

DataGridView.CelLFormatting事件处理程序可能是完成任务的正确工具。

// In constructor
dgvItem.CellFormatting += dgvItem_CellFormatting;


private void dgvItem_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    var dgv = sender as DataGridView;

    if (dgv.Columns[e.ColumnIndex].Name != "Quantity")
    {
        return;
    }

    if (e.Value == null)
    {
        return;
    }

    var quantity = (decimal)e.Value;
    if (quantity < 0)
    {
        e.Value = 0;
    }
}