【问题标题】:Why is count not accurate?为什么计数不准确?
【发布时间】:2014-06-10 14:27:07
【问题描述】:

想法如下:用户可以添加项目并将它们填充到列表框控件中。如果用户没有项目,他们应该无法提交表单。但是,当没有使用的项目时,我添加了一个人造项目:

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,即使上述条件语句的计算正确表明行数为 not 0。我做错了什么?有没有更好的方法来做到这一点?我考虑过使用:

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

但问题在于它会撞到我的人造物品:

lstItems.Items.Insert(0, "No items have been added.");

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

【问题讨论】:

  • 这发生在什么页面事件中?
  • @ps2goat 它发生在填充项目的方法中,在验证页面不是回发后在 page_load 内部调用。

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


【解决方案1】:

numItems 在回发时初始化为 0,您将无法在按钮单击中获得值...

使用类似的东西

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

并检查按钮点击次数

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 当他们添加项目时,我已经从列表中删除了它,但我不知道如何查看它是否是那里唯一的一个。
    • 它是否是唯一的并不重要,重要的是它是否存在。如果它存在,那么他们没有添加任何项目,并且验证失败,如果它不存在,那么他们添加了一个项目,并且通过了验证。
    • 我明白了,但我不知道如何检查。一个代码示例会很有帮助。
    • ListBox.Items.FindByValue(String)
    猜你喜欢
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    相关资源
    最近更新 更多