Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么这不起作用?_C#_List_Session_Gridview - Fatal编程技术网

C# 为什么这不起作用?

C# 为什么这不起作用?,c#,list,session,gridview,C#,List,Session,Gridview,我有一个类,它将作为变量来存储文本框中的数据: public class Business { Int64 _businessID = new Int64(); int _businessNo = new int(); string _businessName; string _businessDescription; public Int64 BusinessID { get { return Convert.ToInt64(_

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

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 businessCollection=new List();
受保护的列表getbusiness()
{
返回(列表)会话[“业务”];
}
受保护的无效btnRow\U单击(对象发送者,事件参数e)
{
if(会话[“业务”]!=null)
businessCollection=(列表)会话[“业务”];
业务b=新业务();
b、 BusinessNo=Convert.ToInt32(txtBNo.Text);
b、 BusinessName=txtBName.Text;
b、 BusinessDescription=txtBDesc.Text;
businessCollection.添加(b);
GridView1.DataSource=GetBusiness();
GridView1.DataBind();
}

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

您似乎没有为
会话[“业务”]
调试代码,并确保
如果(会话[“业务”!=null)
实际计算结果为true

如果为false,则您将添加到从不从
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();
    }

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

这:


注意
var
:我怀疑将businessCollection定义为成员变量是问题的一部分。在任何情况下,如果您的目的是在会话中存储列表,那么这是一种糟糕的设计。因此,我还将删除businessCollection的成员声明,并坚持使用一个局部作用域变量。

GetBusiness()是否返回一个非空的结果?那么,您已经做了多少?
Session[“Business”]
是否实际被填充?此外,向
businessCollection
添加实体的目的是什么。。。然后忽略它,取而代之的是再次检索
Session[Business]
以与列表进行数据绑定?我觉得很可疑……正如Nathan所建议的,GetBusiness()是否返回非空值。列表不能为空,但可能包含0项。将对象添加到businessCollection后,是否应将其重新分配到会话[“Business”]?还有,这个有趣的业务是什么——“get{return Convert.ToInt64(_businessID.ToString());}”
    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();
    }
    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();
    }
        if (Session["Business"] != null)
            businessCollection = (List<Business>)Session["Business"];
        var businessCollection = GetBusiness();