繁体   English   中英

为什么这不起作用?

[英]Why does this not work?

我有一个类,它将作为变量来存储来自文本框的数据:

public class Business
{
    Int64 _businessID = new Int64();
    int _businessNo = new int();
    string _businessName;
    string _businessDescription; 

    public Int64 BusinessID
    {
       get { return Convert.ToInt64(_businessID.ToString()); }
    }

    public int BusinessNo
    {
       get { return _businessNo; }
       set { _businessNo = value; }
    }

    public string BusinessName
    {
       get { return _businessName; }
       set { _businessName = value; }
    }

    public string BusinessDescription
    {
       get { return _businessDescription; }
       set { _businessDescription = value; }
    }

然后,我有了将文本框中的数据存储到会话和列表中的代码(一次可以有很多企业上载到数据库)-现在数据库无关。 然后,我想将存储在会话中的业务列表显示到gridview上:(b =类业务)

List<Business> businessCollection = new List<Business>();

protected List<Business> GetBusinesses()
{
   return (List<Business>)Session["Business"];
}

protected void btnRow_Click(object sender, EventArgs e)
{
   if (Session["Business"] != null)
      businessCollection = (List<Business>)Session["Business"];

   Business b = new Business();

   b.BusinessNo = Convert.ToInt32(txtBNo.Text);
   b.BusinessName = txtBName.Text;
   b.BusinessDescription = txtBDesc.Text;

   businessCollection.Add(b);

   GridView1.DataSource = GetBusiness();
   GridView1.DataBind();
}

似乎没有将列表添加到gridview,有人可以帮忙吗?

调试您的代码,并确保if (Session["Business"] != null)实际为true。

如果为假,则您将添加到从未从GetBusinesss返回的列表中

没有更多的信息,您可以像这样重写它:

    List<Business> businessCollection = new List<Business>();

    protected List<Business> GetBusinesses()
    {
        if (Session["Business"] == null) 
            return businessCollection;
        else 
            return (List<Business>)Session["Business"];
    }

    protected void btnRow_Click(object sender, EventArgs e)
    {            
        Business b = new Business();

        b.BusinessNo = Convert.ToInt32(txtBNo.Text);
        b.BusinessName = txtBName.Text;
        b.BusinessDescription = txtBDesc.Text;

        var currentCollection = GetBusinesses();

        currentCollection.Add(b);

        GridView1.DataSource = currentCollection;
        GridView1.DataBind();
    }

我个人不会这样做,因为您似乎需要分配给Session["Business"]但我不想更改代码的逻辑。

更新资料

我想用我认为你想要完成的事情来更新它。

    protected List<Business> GetBusinesses()
    {
        if (Session["Business"] == null) 
            Session["Business"] = new List<Business>();
        return (List<Business>)Session["Business"];
    }

    protected void btnRow_Click(object sender, EventArgs e)
    {            
        Business b = new Business();

        b.BusinessNo = Convert.ToInt32(txtBNo.Text);
        b.BusinessName = txtBName.Text;
        b.BusinessDescription = txtBDesc.Text;

        var currentCollection = GetBusinesses();

        currentCollection.Add(b);

        GridView1.DataSource = currentCollection;
        GridView1.DataBind();
    }

似乎您没有为Session["Business"]分配任何内容

您出现问题的可能性很大,是由于您不一致地引用业务列表对象而引起的。 您已经为此对象创建了访问器,因此可以在任何地方使用它。

这个:

        if (Session["Business"] != null)
            businessCollection = (List<Business>)Session["Business"];

应该:

        var businessCollection = GetBusiness();

注意使用var :我怀疑将businessCollection定义为成员变量是问题的一部分。 无论如何,如果您打算将列表存储在会话中,那将是一个糟糕的设计。 因此,我还将删除businessCollection的成员声明,​​并使用局部范围的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM