算数为何不准确?

时间:2014-06-10 14:27:07

标签: c# asp.net asp.net-4.0

这是一个想法:用户可以添加项目并填充在列表框控件中。如果用户没有项目,则他们应该无法提交表单。但是,如果没有使用以下项目,我会添加一个人工项目:

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();
}

稍后,我想确保在提交之前有项目,但DataSet(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.");

那么检查列表中是否有任何用户创建的项目的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

在回发中,

numItems被初始化为 0 ,您无法在按钮点击中获得该值...

使用像这样的东西

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

并检查点击按钮上的计数

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

答案 1 :(得分:0)

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