2

I am working with the mvc4 razor, this is the first model code

public class WebLicenses
{
    public string WebLicenseName { get; set; }
    public int CustomerWebLicensesCount { get; set; }
}

public class WebApplication
{
    public string WebApplicationName { get; set; }
    public int Count { get; set; }

    [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
    public DateTime? EndDate { get; set; }

    public string Never { get; set; }
}
public class griddetail
{
    public griddetail( List<WebLicenses> wl1,List<WebApplication> wa1 )
    { 
        wl =wl1;
        wa = wa1;
    }
    //public List<WebLicenses> wl2 { get; private set; }

    public List<WebLicenses> wl { get; set; }
    public List<WebApplication> wa { get; set; }

}

this is my second model code which uses the first model code as (here stored procedure return 2 table - WebLicenses, WebApplication (In below code error comes --commented)

public IEnumerable GetOutlookGridDetail(string customerId = "")
{
        List<WebLicenses> weblicenses = new List<WebLicenses>();
        List<WebApplication> webapplication = new List<WebApplication>();            
        griddetail returnValue = new griddetail(weblicenses, webapplication);          

        SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["SLIMConnectionString"].ConnectionString);
        SqlCommand cmd = new SqlCommand("selectCustomerDetail", cn);
        cmd.CommandType = CommandType.StoredProcedure;

        SqlParameter param_CustomerID = new SqlParameter("@CustomerID", SqlDbType.VarChar, 10);
        param_CustomerID.Value = customerId;
        cmd.Parameters.Add(param_CustomerID);

        try
        {
            cn.Open();

            SqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                WebLicenses newRecord = new WebLicenses();
                newRecord.WebLicenseName = Convert.ToString(reader["WebLicenseName"]);
                newRecord.CustomerWebLicensesCount = Convert.ToInt32(reader["CustomerWebLicensesCount"]);
                //returnValue.Add(newRecord);
                weblicenses.Add(newRecord);                    
            }

            reader.NextResult();

            while (reader.Read())
            {
                WebApplication newRecord = new WebApplication();

                newRecord.WebApplicationName = Convert.ToString(reader["WebApplicationName"]);
                newRecord.Count = Convert.ToInt32(reader["Count"]);
                newRecord.Never = Convert.ToString(reader["Never"]);
                webapplication.Add(newRecord);
            }
            returnValue.wl.Add(weblicenses); //here comes error (Argument 1: cannot convert from 'System.Collections.Generic.List<SLIM.Models.WebLicenses>' to 'SLIM.Models.WebLicenses')
        }
        catch (Exception)
        {
            // returnValue = null;
        }
        finally
        {
            cmd.Dispose();

            if (cn.State == ConnectionState.Open)
            {
                cn.Close();
            }
        }

        return returnValue;
}

this is my controller code.

    [HttpPost]
    public ActionResult GridViewPartialView(string recordId)
    {
        IEnumerable result1 = (new SlimHomePageData()).GetRecords(recordId, "");
        IEnumerable result2 = (new SlimHomePageData()).GetRecords();
        List<object> finalResult = new List<object>();
        finalResult.Add(result1);
        finalResult.Add(result2);
        return PartialView("OutlookGridDetail", finalResult);            
    }

I want to return a single list which consists 2 lists (but above error comes). Also suggest, Is this right approach as stored procedure return multiple tables and we want to set value in view via a model.

2 Answers 2

5

I forgot to give answer, but yesterday somebody gives minus vote. Yes its too long time. What I did (I again explain everything to understand more) :

Step1: Define the 2 class as

public class WebLicenses
    {
        public int WebLicenseID { get; set; }
        public string WebLicenseName { get; set; }
        public int CustomerWebLicensesCount { get; set; }
        public string CreatedBy { get; set; }
        public string UpdatedBy { get; set; }
    }

public class WebApplication
{
    public int appID { get; set; }
    public string WebApplicationName { get; set; }
    public int Count { get; set; }

    [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}")]
    public DateTime? EndDate { get; set; }

    public bool Never { get; set; }
    public string CreatedBy { get; set; }
    public string UpdatedBy { get; set; }
}

public class griddetail
{
    public griddetail(List<WebLicenses> wl1, List<WebApplication> wa1)
    {
        weblicences = wl1;
        webapplication = wa1;
    }

    public List<WebLicenses> weblicences { get; set; }
    public List<WebApplication> webapplication { get; set; }        
}

Step2: change in controller as

  1. Change return type IEnumerable to griddetail class
  2. At the end declare and assign this nested class in a griddetail class

    public class SlimHomePageData
    {
         private SLIMDataContext dc = new SLIMDataContext(ConfigurationManager.ConnectionStrings["SLIMConnectionString"].ConnectionString);
    .
    .
    .
    
     public IEnumerable GetOutlookGridDetail(string customerId = "")
    {
        List<WebLicenses> weblicenses = new List<WebLicenses>();
        List<WebApplication> webapplication = new  List<WebApplication>();            
       //remove from here and add at the end of this method 
       //griddetail returnValue = new griddetail(weblicenses, webapplication);          
    
       SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["SLIMConnectionString"].ConnectionString);
       SqlCommand cmd = new SqlCommand("selectCustomerDetail", cn);
       cmd.CommandType = CommandType.StoredProcedure;
    
       SqlParameter param_CustomerID = new SqlParameter("@CustomerID", SqlDbType.VarChar, 10);
       param_CustomerID.Value = customerId;
       cmd.Parameters.Add(param_CustomerID);
    
       try
       {
        cn.Open();
    
        SqlDataReader reader = cmd.ExecuteReader();
    
           if (reader.HasRows)
            {
                while (reader.Read())
                {
                    WebLicenses newRecord = new WebLicenses();
                    newRecord.WebLicenseName = Convert.ToString(reader["WebLicenseName"]);
                    newRecord.CustomerWebLicensesCount = Convert.ToInt32(reader["CustomerWebLicensesCount"]);
                    weblicenses.Add(newRecord);
                }
            }
    
            reader.NextResult();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    WebApplication newRecord = new WebApplication();
    
                    newRecord.WebApplicationName = Convert.ToString(reader["WebApplicationName"]);
                    newRecord.Count = Convert.ToInt32(reader["Count"]);
    
                    bool never = false;
    
                    if (reader["Never"] != DBNull.Value)
                    {
                        bool.TryParse(reader["Never"].ToString(), out never);
                    }
    
                    if (reader["EndDate"] != DBNull.Value)
                    {
                        newRecord.EndDate = Convert.ToDateTime(reader["EndDate"]);
                    }
    
                    newRecord.Never = never;
    
                    webapplication.Add(newRecord);
                }
            }
    
    
        reader.Close();
    
       }
       catch (Exception)
       {
           // returnValue = null;
       }
       finally
       {
           cmd.Dispose();
    
           if (cn.State == ConnectionState.Open)
           {
               cn.Close();
           }
       }
    
           griddetail returnValue = new griddetail(weblicenses, webapplication, webcustomapplication, maintenance, smartcv, histry, doc);
        return returnValue;
       }
      .
       .
      }//closing of my SlimHomePageData class
    

**Step 3:**In ActionMethod changed as :After posted this question I changed in the method, but you can use the same method concept in above question. Later I need another class to add result1 while return.

      public ActionResult GridViewPartialView()
{
          return View();
}


[HttpPost]
        public ActionResult childGridViewPartialView(string recordId, string filtervalue, string flag)
        {
            if (flag == "GridRowChanged")
            {
                IEnumerable result1;
                griddetail result3;
                if (recordId != null)
                {
                    result1 = (new SlimHomePageData()).GetRecords(recordId, "");  //another result to be add later at the end of action method
                    result3 = (new SlimHomePageData()).GetOutlookGridDetail(recordId); //this was in my question
                }
                else
                {
                    result1 = new List<SlimHomePageRecord>();   //another result to be add later at the end of action method
                    result3 = (new SlimHomePageData()).GetOutlookGridDetail(recordId); //this was in my question
                }

                List<object> finalResult = new List<object>();
                finalResult.Add(result1);
                finalResult.Add(result3);
                return PartialView("OutlookGridDetail", finalResult);  
            }
            else
            {
                return PartialView("childGridViewPartialView", (new SlimHomePageData()).GetRecords(null, null));
            }
        }
Sign up to request clarification or add additional context in comments.

Comments

0

the instance weblicenses is a List type. It looks like it should be a single instance of WebLicenses.

You may want to add the newRecord instance to the returnValue.wl list instead of the list instance.

Edit: You don't need to add anything to the wl list properties because you are adding to the WebLicenses list. The property wl on returnValue is a reference to the WebLicences instance so if you add to WebLicences then wl will show the same addition.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.