我想摆脱在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
答案 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;
}
}