Почему это не работает? - PullRequest
       4

Почему это не работает?

0 голосов
/ 04 февраля 2011

У меня есть класс, который будет действовать как переменная для хранения данных из текстовых полей:

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

Затем у меня есть код для хранения данных из текстового поля в сеансе и в списке (может быть много предприятий, загруженных в базу данных одновременно) - база данных пока не имеет отношения к делу. Затем я хочу отобразить список предприятий, сохраненных в сеансе, в виде таблицы: (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();
}

Похоже, что список не добавляется в сетку, кто-то может помочь?

Ответы [ 3 ]

1 голос
/ 04 февраля 2011

Отладьте ваш код и убедитесь, что if (Session["Business"] != 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();
    }

Лично я бы так не поступил, поскольку кажется, что вам нужно присвоить 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();
    }
0 голосов
/ 04 февраля 2011

Существует очень высокая вероятность того, что ваша проблема вызвана тем, что вы непоследовательно ссылаетесь на объект Business List. Вы создали средство доступа для этого объекта, поэтому используйте его везде.

Это:

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

Должно быть:

        var businessCollection = GetBusiness();

Обратите внимание на использование var: я подозреваю, что определение businessCollection в качестве переменной-члена является частью проблемы. В любом случае это плохой дизайн, если вы хотите сохранить список в сеансе. Поэтому я бы также удалил объявление члена для businessCollection и придерживался локальной переменной.

0 голосов
/ 04 февраля 2011

Кажется, вы ничего не присваиваете Session["Business"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...