为什么计数不准确

本文关键字:不准确 为什么 | 更新日期: 2023-09-27 18:08:11

思路是这样的:用户可以添加项并将它们填充到列表框控件中。如果用户没有条目,他们就不能提交表单。但是,当没有项目时,我使用:

添加一个人工项目:
if (ds.Tables[0].Rows.Count == 0)
{
    lstItems.Items.Insert(0, "No items have been added.");
}
else
{
    lstItems.DataSource = ds;
    lstItems.DataTextField = "ItemInfo";
    lstItems.DataValueField = "Item_ID";
    lstItems.DataBind();
}

之后,我想确保在提交之前有项目,但是数据集(ds)在该函数/上下文中不可用。为了解决这个问题,我在类中声明了一个可以引用的全局变量(public int):

public int numItems = 0;

然后像这样设置:

numItems = ds.Tables[0].Rows.Count;

这样它就不会被我插入lstItems中的一条人工记录抛出。然而,这不起作用。该值保持为0,即使上述条件语句的计算正确,表明行数为而不是 0。我做错了什么?有更好的方法吗?我考虑使用:

if (lstItems.Items.Count < 1)
{
    // allow submission
}

但问题是,它与我的人工项目相匹配:

lstItems.Items.Insert(0, "No items have been added.");
那么,检查列表中是否有用户创建的项目的最佳方法是什么呢?

为什么计数不准确

numItems初始化为0在回发时,您将无法获得按钮点击的值…

使用像这样的东西

ViewState["count"] =  ds.Tables[0].Rows.Count;

和检查计数按钮点击

if(Convert.ToInt32(ViewState["count"]) > 0)
{
// your logic
}

当用户添加一个项目时,从列表中删除默认的项目。然后,您可以根据您的人工项目是否存在于列表中,而不是基于使用全局的项目计数来进行验证。